C#关于json字符串解析的封装

来源:互联网 发布:淘宝装修全屏海报 编辑:程序博客网 时间:2024/04/29 03:36

本文的目标是实现C#语言对json字符串解析的封装,使用到的动态链接库是:Newtonsoft.Json。
下面叙述封装的过程:
1.首先是构造Json解析对象JsonDecode:

        private JObject jo;//json对象        private string jsonString;//json字符串        public JsonDecode(string str)        {            this.jsonString = str;            try            {                this.jo = JObject.Parse(str.Trim());                Console.WriteLine("init jsondecode");            }            catch (Exception e)            {                Console.WriteLine(e.Message);                Console.WriteLine("json base error!");                this.jo = JObject.Parse("\"MsgType\":\"error\"");            }        }

由上面的代码可以看到,JsonDecode对象有2个成员变量,一个是JObject对象,这是我们要进行的操作对象;一个是json字符串,这是构造JsonDecode对象所需要传进来的待解析字符串。
2.根据不同的字符串进行解析,得到所需要的内容:
比如:{success:true,message:”123”},解析的方法如下:

        public Boolean getResult()        {            Boolean result = GetJObject()["success"].Value<Boolean>();            return result;        }        public string getMsg()        {            string result = GetJObject()["message"].Value<string>();            return result;        }

还有比如上类型更为复杂的字符串比如:

{    "num": 2,    "child": [        {            "date": {                "date": 15,                "day": 1,                "hours": 0,                "minutes": 0,                "month": 5,                "nanos": 0,                "seconds": 0,                "time": 1434297600000,                "timezoneOffset": -480,                "year": 115            },            "addName": "admin",            "addr": "北京",            "name": "李",            "phone": "123",            "id": 106        },        {            "date": {                "date": 15,                "day": 1,                "hours": 0,                "minutes": 0,                "month": 5,                "nanos": 0,                "seconds": 0,                "time": 1434297600000,                "timezoneOffset": -480,                "year": 115            },            "addName": "admin",            "addr": "山东",            "name": "张",            "phone": "123",            "id": 107        }    ]}

解析代码如下:
1.首先定义一个Person对象,方便对数据进行保存:

    public class Person    {        public string name;        public string phone;        public string addr;        public int id;        }

2。接着进行解析:

public List<Person> getPerson()        {            JToken listData = GetJObject()["child"];            List<Person> result = new List<Person>();            foreach (JToken jt in listData)            {                Person person = new Person();                person.name = jt.SelectToken("name").ToString();                person.phone = jt.SelectToken("phone").ToString();                person.addr = jt.SelectToken("addr").ToString();                person.id = int.Parse(jt.SelectToken("id").ToString());                result.Add(person);            }            return result;        }

以上就完成了对字符串的解析。
如果是对内部的date进行解析的话,通过以下代码:

JToken listDate=jt.SelectToken("date");foreach(JToken jt in listDate){    jt.SelectToken("date");    jt.SelectToken("day");    jt.SelectToken("month");    jt.SelectToken("minutes");}

以上,便是对基本的json的字符串进行解析,更多负责的类型都是在这基础之上的~

0 0