Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串
2013-09-03 21:47
477 查看
写在开头:
最近项目需求,需要在C#中处理json字符串,毫不犹豫的下载了Newtonsoft.Json 4.5.11(2012.12.17)http://json.codeplex.com/,然后百度教程,还比较多(心喜),大致方法类似如下:
[csharp] view plaincopy
using Newtonsoft.Json;
using System.Text;
StringBuilder sb = new StringBuilder();
string str = "[{ID:'1',Name:'John',Other:[{Age:'21',Sex:'0'}]},{ID:'2',Name:'Good',Other:[{Age:'36',Sex:'1'}]}]";
JavaScriptArray javascript = (JavaScriptArray)JavaScriptConvert.DeserializeObject(str);
for (int i = 0; i < javascript.Count; i++ )
{
JavaScriptObject obj = (JavaScriptObject)javascript[i];
sb.Append("ID:" + obj["ID"].ToString());
sb.Append("Name:" + obj["Name"].ToString());
JavaScriptArray json = (JavaScriptArray)obj["Other"];
for (int j = 0; j < json.Count; j++){
JavaScriptObject jsonobj = (JavaScriptObject)json[j];
sb.Append("Age:" + jsonobj["Age"].ToString());
sb.Append("Sex:" + jsonobj["Sex"].ToString());
}
}
还有一种方法是:
[csharp] view plaincopy
string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
JsonReader reader = new JsonReader(new StringReader(jsonText));
while (reader.Read())
{
textBox1.Text += "TokenType = " + reader.TokenType + " ValueType = " + reader.ValueType + " Value = " + reader.Value + "\r\n";
}
第一种方法编译直接出错,根本不识别JavaScriptArray,JavaScriptObject,就连JavaScriptConvert方法也木有,靠!那好吧,第二种总行了吧,提示:
错误 2 无法创建抽象类或接口“Newtonsoft.Json.JsonReader”的实例
这是要闹哪样???
后面查看了Newtonsoft.Json库中的方法,根本没有嘛!再百度,终于有位仁兄说在新版中JavaScriptArray变成了JArray,顺着这个思路,发现变化如下:
[csharp] view plaincopy
JavaScriptArray--->JArray
JavaScriptConvert--->JsonConvert
JavaScriptObject--->JObject
仔细看看,人家这样改更规范了嘛!
使用方法总结:
1、较简单的一种
[csharp] view plaincopy
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
JArray ja =(JArray) JsonConvert.DeserializeObject(jsonText);
JObject o = (JObject)ja[1];
Console.WriteLine(o["a"]);
Console.WriteLine(ja[1]["a"]);
2、自定义对象列表
定义一个对象:
[csharp] view plaincopy
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// <summary>
///Customer 的摘要说明
/// </summary>
public class Customer
{
//在序列化前后没有变动
public string a { get; set; }
//在序列化前后设置和重置
public string b { get; set; }
//设置为null,但在序列化后填充
public string c { get; set; }
public string Other { get; set; }
public Customer()
{
//
//TODO: 在此处添加构造函数逻辑
//
a = "";
b = "";
c = "";
Other = null;
}
}
反序列化json字符串:
[csharp] view plaincopy
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
List<Customer> _list = JsonConvert.DeserializeObject<List<Customer>>(jsonText);
Console.WriteLine(_list[1].a);
foreach (Customer c in _list)
{
Console.WriteLine(c.c);
}
我感觉两种方法各有好处,第二种虽然需要再写一个对象,但可以像在js里面一样使用,感觉很爽!
作者:kunoy
出处:http://blog.csdn.net/kunoy
申明:作者写博是为了总结经验,和交流学习之用。 如需转载,请尽量保留此申明,并在文章页面明显位置给出原文连接。谢谢!
最近项目需求,需要在C#中处理json字符串,毫不犹豫的下载了Newtonsoft.Json 4.5.11(2012.12.17)http://json.codeplex.com/,然后百度教程,还比较多(心喜),大致方法类似如下:
[csharp] view plaincopy
using Newtonsoft.Json;
using System.Text;
StringBuilder sb = new StringBuilder();
string str = "[{ID:'1',Name:'John',Other:[{Age:'21',Sex:'0'}]},{ID:'2',Name:'Good',Other:[{Age:'36',Sex:'1'}]}]";
JavaScriptArray javascript = (JavaScriptArray)JavaScriptConvert.DeserializeObject(str);
for (int i = 0; i < javascript.Count; i++ )
{
JavaScriptObject obj = (JavaScriptObject)javascript[i];
sb.Append("ID:" + obj["ID"].ToString());
sb.Append("Name:" + obj["Name"].ToString());
JavaScriptArray json = (JavaScriptArray)obj["Other"];
for (int j = 0; j < json.Count; j++){
JavaScriptObject jsonobj = (JavaScriptObject)json[j];
sb.Append("Age:" + jsonobj["Age"].ToString());
sb.Append("Sex:" + jsonobj["Sex"].ToString());
}
}
还有一种方法是:
[csharp] view plaincopy
string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
JsonReader reader = new JsonReader(new StringReader(jsonText));
while (reader.Read())
{
textBox1.Text += "TokenType = " + reader.TokenType + " ValueType = " + reader.ValueType + " Value = " + reader.Value + "\r\n";
}
第一种方法编译直接出错,根本不识别JavaScriptArray,JavaScriptObject,就连JavaScriptConvert方法也木有,靠!那好吧,第二种总行了吧,提示:
错误 2 无法创建抽象类或接口“Newtonsoft.Json.JsonReader”的实例
这是要闹哪样???
后面查看了Newtonsoft.Json库中的方法,根本没有嘛!再百度,终于有位仁兄说在新版中JavaScriptArray变成了JArray,顺着这个思路,发现变化如下:
[csharp] view plaincopy
JavaScriptArray--->JArray
JavaScriptConvert--->JsonConvert
JavaScriptObject--->JObject
仔细看看,人家这样改更规范了嘛!
使用方法总结:
1、较简单的一种
[csharp] view plaincopy
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
JArray ja =(JArray) JsonConvert.DeserializeObject(jsonText);
JObject o = (JObject)ja[1];
Console.WriteLine(o["a"]);
Console.WriteLine(ja[1]["a"]);
2、自定义对象列表
定义一个对象:
[csharp] view plaincopy
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
/// <summary>
///Customer 的摘要说明
/// </summary>
public class Customer
{
//在序列化前后没有变动
public string a { get; set; }
//在序列化前后设置和重置
public string b { get; set; }
//设置为null,但在序列化后填充
public string c { get; set; }
public string Other { get; set; }
public Customer()
{
//
//TODO: 在此处添加构造函数逻辑
//
a = "";
b = "";
c = "";
Other = null;
}
}
反序列化json字符串:
[csharp] view plaincopy
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
string jsonText = "[{'a':'aaa','b':'bbb','c':'ccc'},{'a':'aaa2','b':'bbb2','c':'ccc2'}]";
List<Customer> _list = JsonConvert.DeserializeObject<List<Customer>>(jsonText);
Console.WriteLine(_list[1].a);
foreach (Customer c in _list)
{
Console.WriteLine(c.c);
}
我感觉两种方法各有好处,第二种虽然需要再写一个对象,但可以像在js里面一样使用,感觉很爽!
作者:kunoy
出处:http://blog.csdn.net/kunoy
申明:作者写博是为了总结经验,和交流学习之用。 如需转载,请尽量保留此申明,并在文章页面明显位置给出原文连接。谢谢!
相关文章推荐
- Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串
- Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串
- Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串
- Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串
- Newtonsoft.Json.4.5.11使用方法总结---反序列化json字符串
- Newtonsoft.Json.4.5.0 序列化与反序列化json字符串使用方法总结
- c# 使用 Newtonsoft.Json 序列化json字符串以及,反序列化对象
- 使用JSON JavaScriptSerializer 进行序列化或反序列化时出错。字符串的长度超过了为 maxJsonLength属性
- asp.net使用DataTable构造Json字符串的方法
- 流编辑器sed使用总结及利用sed从文本中提取字符串的方法
- Newtonsoft.Json.dll 反序列化JSON字符串
- 【总结:数据库连接字符串的使用方法】
- JS经常使用字符串处理方法总结
- .net MVC 使用 JSON JavaScriptSerializer 进行序列化或反序列化时出错,字符串的长度超过了为 maxJsonLength 属性设置的值
- Js中JSON字符串和对象互转的方法总结
- 总结:数据库连接字符串的使用方法
- Newtonsoft.Json 序列化和反序列化 以及时间格式 2 高级使用
- Java Web程序实现返回JSON字符串的方法总结
- Newtonsoft.Json解析json字符串处理(最清晰易懂的方法)