首页 技术 正文
技术 2022年11月9日
0 收藏 954 点赞 3,183 浏览 2297 个字

转自:http://www.cnblogs.com/xfrog/archive/2010/04/07/1706754.html

NET通用JSON解析/构建类的实现(c#)

在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加上JSON序列化特性。本文将试图提供一个高度灵活的JSON通用类型(JsonObject),实现对JSON的解析及序列化。

假设JSON对象内容如下:

隐藏行号 复制代码 ? JSON

  1. {
  2.     orders: {
  3.         date: '21:31:59',
  4.         name: 'Xfrog',
  5.         books: [{
  6.             name: 'C# 网络核心编程',
  7.             publish: '2010-3-24'
  8.         }, {
  9.             name: 'C#入门经典中文版',
  10.             publish: '2009-10-16'
  11.         }]
  12.     },
  13.     blog: 'http://www.cnblogs.com/xfrog'
  14. }

使用JsonObject来构建,可选择以下三种方式:
方式一:

隐藏行号 复制代码 ? C#

  1. //通过标准构造函数
  2. JsonObject json = new JsonObject();
  3. json["orders"] = new JsonProperty(new JsonObject());
  4. json["blog"] = new JsonProperty("http://www.cnblogs.com/xfrog");
  5. 
    
  6. JsonObject config = json.Properties<JsonObject>("orders");
  7. json["orders"]["date"] = new JsonProperty(DateTime.Now.ToLongTimeString());
  8. json["orders"]["name"] = new JsonProperty("Xfrog");
  9. json["orders"]["books"] = new JsonProperty();
  10. 
    
  11. JsonProperty book = json["orders"]["books"].Add(new JsonObject());
  12. book["name"] = new JsonProperty("C# 网络核心编程");
  13. book["publish"] = new JsonProperty("2010-3-24");
  14. 
    
  15. book = json["orders"]["books"].Add(new JsonObject());
  16. book["name"] = new JsonProperty("C#入门经典中文版");
  17. book["publish"] = new JsonProperty("2009-10-16");

方式二:

隐藏行号 复制代码 ? C#

  1. //通过回调函数简化对象的构建
  2. JsonObject json2 = new JsonObject((a) =>
  3. {
  4.     a["orders"] = new JsonProperty(new JsonObject((b) =>
  5.     {
  6.         b["date"] = new JsonProperty(DateTime.Now.ToLongTimeString());
  7.         b["name"] = new JsonProperty("Xfrog");
  8.         b["books"] = new JsonProperty();
  9.         b["books"].Add(new JsonObject((c) =>
  10.         {
  11.             c["name"] = new JsonProperty("C# 网络核心编程");
  12.             c["publish"] = new JsonProperty("2010-3-24");
  13.         }));
  14.         b["books"].Add(new JsonObject((c) =>
  15.         {
  16.             c["name"] = new JsonProperty("C#入门经典中文版");
  17.             c["publish"] = new JsonProperty("2009-10-16");
  18.         }));
  19.     }));
  20.     a["blog"] = new JsonProperty("http://www.cnblogs.com/xfrog");
  21. });

方式三:

隐藏行号 复制代码 ? C#

  1. //通过字符串构建Json对象
  2. JsonObject newObj = new JsonObject(jsonStr);

获取Json对象属性值的方法,也有三种方式:

隐藏行号 复制代码 ? C#

  1. //通过泛型函数
  2. Console.WriteLine(newObj["orders"].GetValue<JsonObject>()["books"].GetValue<List<JsonProperty>>()[1].GetValue<JsonObject>()["name"].Value);
  3. //通过属性类型对应的属性
  4. Console.WriteLine(newObj["orders"].Object["books"].Items[1].Object["name"].Value);
  5. //如果属性为对象类型,可通过字符串索引简化
  6. Console.WriteLine(newObj["orders"]["books"][1]["name"].Value);

直接使用ToString函数,将JsonObject转换为Json字符串:

隐藏行号 复制代码 ? C#

  1. String jsonStr = json.ToString();

注意:

我在重载ToString函数时,并没有将字符串转换为JavsScript字符串类型(即对需要转义的字符的处理),当然,要实现也是极其简单的。另外,对于带String参数的ToString,我也为做特殊处理,感兴趣的朋友可自行实现。

Technorati 标签: .NET,JSON,C#

源代码下载

 

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,497
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,910
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,744
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,498
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,137
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,301