本文的目标是实现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();
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 getPerson()
{
JToken listData = GetJObject()["child"];
List result = new List();
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的字符串进行解析,更多负责的类型都是在这基础之上的~