menu
more_vert
Newtonsoft.Json.dll 反序列化JSON字符串

作者:dayu

如今因为项目需求(asp.net web网站,前台向后台传递JSON数据,并对JSON数据处理,详述见博客《

《项目经验》--通过js获取前台数据向一般处理程序传递Json数据,并解析Json数据,将前台传来的Json数据写入数据库表中

》),需要对传递的JSON数据反序列化。于是从网上找了许多JSON反序列化的例子,最终决定使用Newtonsoft.Json.dll 反序列化JSON字符串,当然它也可以序列化JSON字符串,Newtonsoft.Json.dll下载链接

使用Newtonsoft.Json.dll反序列化JSON字符串的步骤:

1.对Newtonsoft.Json.dll添加引用

将Newtonsoft.Json.dll文件拷贝至界面层的Bin目录下,然后右击Bin,弹出“添加引用”页,然后点击“浏览”,然后找到界面层的Bin文件夹,找到Newtonsoft.Json.dll文件,然后点击"添加",引用添加成功!

技术分享

2.在需要对JSON字符串处理的界面,引用JSON空间,并对JSON进行处理

网上解决办法大致如下:

方法1:

[csharp]view plaincopy
print?

  1. <spanstyle="font-family:KaiTi_GB2312;font-size:18px;">//引用JSON解析使用的空间
  2. usingNewtonsoft.Json;
  3. usingSystem.Text;
  4. //定义一个可变字符串数组
  5. StringBuildersb=newStringBuilder();
  6. //定义一个JSON字符串str
  7. stringstr="[{ID:‘1‘,Name:‘John‘,Other:[{Age:‘21‘,Sex:‘0‘}]},{ID:‘2‘,Name:‘Good‘,Other:[{Age:‘36‘,Sex:‘1‘}]}]";
  8. //反序列化JSON数据
  9. JavaScriptArrayjavascript=(JavaScriptArray)JavaScriptConvert.DeserializeObject(str);
  10. //依次读取反序列化的JSON数据,并将各数据写入可变字符串数组中
  11. for(inti=0;i<javascript.Count;i++)
  12. {
  13. //
  14. JavaScriptObjectobj=(JavaScriptObject)javascript[i];
  15. //可变字符串数组添加数据
  16. sb.Append("ID:"+obj["ID"].ToString());
  17. sb.Append("Name:"+obj["Name"].ToString());
  18. //反序列化JSON数据
  19. JavaScriptArrayjson=(JavaScriptArray)obj["Other"];
  20. //依次读取反序列化的JSON数据,并将各数据写入可变字符串数组中
  21. for(intj=0;j<json.Count;j++)
  22. {
  23. JavaScriptObjectjsonobj=(JavaScriptObject)json[j];
  24. sb.Append("Age:"+jsonobj["Age"].ToString());
  25. sb.Append("Sex:"+jsonobj["Sex"].ToString());
  26. }
  27. }</span>


还有一种方法是:

[csharp]view plaincopy
print?

  1. //定义一个JSON字符串str
  2. stringjsonText="[{‘a‘:‘aaa‘,‘b‘:‘bbb‘,‘c‘:‘ccc‘},{‘a‘:‘aaa2‘,‘b‘:‘bbb2‘,‘c‘:‘ccc2‘}]";
  3. //反序列化JSON数据
  4. JsonReaderreader=newJsonReader(newStringReader(jsonText));
  5. //依次读取反序列化的JSON数据
  6. while(reader.Read())
  7. {
  8. textBox1.Text+="TokenType="+reader.TokenType+"ValueType="+reader.ValueType+"Value="+reader.Value+"\r\n";
  9. }

第一种方法编译直接出错,根本不识别JavaScriptArray,JavaScriptObject,就连JavaScriptConvert方法也木有!那好吧,第二种总行了吧,提示:

错误2无法创建抽象类或接口“Newtonsoft.Json.JsonReader”的实例

这是怎么回事???

后来在搜到的文章中,发现新版中JavaScriptArray变成了JArray,顺着这个思路,发现变化如下:

[csharp]view plaincopy
print?

  1. <spanstyle="font-family:KaiTi_GB2312;font-size:18px;">JavaScriptArray--->JArray
  2. JavaScriptConvert--->JsonConvert
  3. JavaScriptObject--->JObject</span>

其实这样更改更规范吧!

下面介绍新版本Newtonsoft.Json.dll反序列化JSON字符串的方法

1.直接反序列化JSON字符串

[csharp]view plaincopy
print?

  1. //引用序列化、反序列化JSON字符串用到的空间
  2. usingNewtonsoft.Json;
  3. usingNewtonsoft.Json.Linq;
  4. //定义一个JSON字符串
  5. stringjsonText="[{‘a‘:‘aaa‘,‘b‘:‘bbb‘,‘c‘:‘ccc‘},{‘a‘:‘aaa2‘,‘b‘:‘bbb2‘,‘c‘:‘ccc2‘}]";
  6. //反序列化JSON字符串
  7. JArrayja=(JArray)JsonConvert.DeserializeObject(jsonText);
  8. //将反序列化的JSON字符串转换成对象
  9. JObjecto=(JObject)ja[1];
  10. //读取对象中的各项值
  11. Console.WriteLine(o["a"]);
  12. Console.WriteLine(ja[1]["a"]);

2.定义对象列表,然后反序列化JSON字符串

2.1 添加一个类,定义一个对象

[csharp]view plaincopy
print?

  1. usingSystem;
  2. usingSystem.Collections.Generic;
  3. usingSystem.Linq;
  4. usingSystem.Web;
  5. ///<summary>
  6. ///Customer的摘要说明
  7. ///</summary>
  8. publicclassCustomer
  9. {
  10. //在序列化前后没有变动
  11. publicstringa
  12. {get;set;}
  13. //在序列化前后设置和重置
  14. publicstringb
  15. {get;set;}
  16. //设置为null,但在序列化后填充
  17. publicstringc
  18. {get;set;}
  19. publicstringOther
  20. {get;set;}
  21. publicCustomer()
  22. {
  23. //
  24. //TODO:在此处添加构造函数逻辑
  25. //
  26. a="";
  27. b="";
  28. c="";
  29. Other=null;
  30. }
  31. }

2.2 反序列化JSON字符串

[csharp]view plaincopy
print?

  1. //引用序列化、反序列化JSON字符串用到的空间
  2. usingNewtonsoft.Json;
  3. usingNewtonsoft.Json.Linq;
  4. //定义一个JSON字符串
  5. stringjsonText="[{‘a‘:‘aaa‘,‘b‘:‘bbb‘,‘c‘:‘ccc‘},{‘a‘:‘aaa2‘,‘b‘:‘bbb2‘,‘c‘:‘ccc2‘}]";
  6. //反序列化JSON字符串,将JSON字符串转换成LIST列表
  7. List<Customer>_list=JsonConvert.DeserializeObject<List<Customer>>(jsonText);
  8. //读取列表中的值
  9. Console.WriteLine(_list[1].a);
  10. foreach(Customercin_list)
  11. {
  12. Console.WriteLine(c.c);
  13. }


我感觉这两种反序列化JSON的方法都挺好,其实还用很多方式可以反序列化JSON,本文仅仅借助了Newtonsoft.Json.dll这个工具!

Newtonsoft.Json.dll 反序列化JSON字符串

原文地址:http://www.cnblogs.com/zxtceq/p/7520727.html



Processed Time:0.3203809261322

_REQUEST:
Array
(
    [0] => read
    [1] => 86140
)
_SESSION:
Array
(
    [fid] => 4
)