一个.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. JsonObject config = json.Properties<<SPAN style="COLOR: rgb(43,145,175)">JsonObject>("orders");
  6. json["orders"]["date"] = new JsonProperty(DateTime.Now.ToLongTimeString());
  7. json["orders"]["name"] = new JsonProperty("Xfrog");
  8. json["orders"]["books"] = new JsonProperty();
  9. JsonProperty book = json["orders"]["books"].Add(new JsonObject());
  10. book["name"] = new JsonProperty("C# 网络核心编程");
  11. book["publish"] = new JsonProperty("2010-3-24");
  12. book = json["orders"]["books"].Add(new JsonObject());
  13. book["name"] = new JsonProperty("C#入门经典中文版");
  14. 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<<SPAN style="COLOR: rgb(43,145,175)">JsonObject>()["books"].GetValue<<SPAN style="COLOR: rgb(43,145,175)">List<<SPAN style="COLOR: rgb(43,145,175)">JsonProperty>>()[1].GetValue<<SPAN style="COLOR: rgb(43,145,175)">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#


版权声明:本文为博主原创文章,未经博主允许不得转载。

一个.NET通用JSON解析/构建类的实…的更多相关文章

  1. C#字符串数组排序 C#排序算法大全 C#字符串比较方法 一个.NET通用JSON解析/构建类的实现(c#) C#处理Json文件 asp.net使用Jquery+iframe传值问题

    C#字符串数组排序   //排序只带字符的数组,不带数字的 private   string[]   aa   ={ "a ", "c ", "b & ...

  2. 一个.NET通用JSON解析/构建类的实现(c#)转

    转自:http://www.cnblogs.com/xfrog/archive/2010/04/07/1706754.html NET通用JSON解析/构建类的实现(c#) 在.NET Framewo ...

  3. 一个强大的json解析工具类

    该工具类利用递归原理,能够将任意结构的json字符串进行解析.当然,如果需要解析为对应的实体对象时,就不能用了 package com.wot.cloudsensing.carrotfarm.util ...

  4. Tomjson - 一个"短小精悍"的 json 解析库

    Tomjson,一个"短小精悍"的 json 解析库,tomjson使用Java语言编写,主要作用是把Java对象(JavaBean)序列化为json格式字符串,将json格式字符 ...

  5. 自己动手实现一个简单的JSON解析器

    1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等.在 ...

  6. 一个简单的json解析器

    实现一个简单地json解析器. 两部分组成,词法分析.语法分析 词法分析 package com.mahuan.json; import java.util.LinkedList; import ja ...

  7. 用c#自己实现一个简单的JSON解析器

    一.JSON格式介绍 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着很多优点.例如易读性更好,占用空间更 ...

  8. iOS 自己封装的网络请求,json解析的类

    基本上所有的APP都会涉及网络这块,不管是用AFNetWorking还是自己写的http请求,整个网络框架的搭建很重要. 楼主封装的网络请求类,包括自己写的http请求和AFNetWorking的请求 ...

  9. 基于json-lib-2.2.2-jdk15.jar的JSON解析工具类大集合

    json解析之前的必备工作:导入json解析必须的六个包 资源链接:百度云:链接:https://pan.baidu.com/s/1dAEQQy 密码:1v1z 代码示例: package com.s ...

随机推荐

  1. ios -- 延迟3秒触发performSelector

    [self performSelector:@selector(changeText:) withObject:@"Happy aha" afterDelay:3];

  2. Linux系统初始化流程

    POST-->BIOS(Boot Sequence)-->MBR(bootloader)-->Kernel(initrd)-->/sbin/init(/etc/inittab) ...

  3. 关于Android6.0 之EasyPermissionUtil

    之前6.0权限用第三方类库比较多,但是都是挺麻烦的,今天给大家推荐一个好用的第三方类库: gitHub地址:https://github.com/yxping/EasyPermissionUtil 使 ...

  4. 整合Settings.bundle显示版本信息

    本文转载至 http://www.cocoachina.com/ios/20141103/10112.html iOS开发XCode版本管理Debug开发Tips   现在你有一个App,你同事的iP ...

  5. jquery获取form表单中的内容,并将表单内容更新到datagrid的一行

    //执行不刷新页面更新所修改的行 var arr = $('#patient_form').serializeArray();//将表单中的数据格式化成数组 var m = new Array(); ...

  6. mysq'l系列之10.mysql优化&权限控制

    网站打开慢如何排查 1.打开网页, 用谷歌浏览器F12, 查看network: 哪个加载时间长就优化哪个 2.如果是数据库问题 2.1 查看大体情况 # top # uptime  //load av ...

  7. (转) 在linux网络UDP通信中,关于客户端是否绑定的理解

    最近在做一个实例,是用RTSP协议完成.服务器已经有了,只需要把客户端做好就行了,在做的过程中发现了一些问题,就是关于UDP客户端是否绑定的问题. 也许大家在书上看到的大多都是说UDP客户端不需要绑定 ...

  8. @Transactional注解不回滚原因详解

    最近试了试spring的回滚功能,根据网上的教程配置怎么都不好使,遂寻找答案, 网上的答案都是这么讲的: 1. 检查你方法是不是public的. 2. 你的异常类型是不是unchecked异常.如果我 ...

  9. 顽石系列:Java技术面试

    顽石系列:Java技术面试 JDBC相关 1.Statement与PreparedStatement的区 别,什什么是SQL注⼊入,如何防⽌止SQL注⼊? PreparedStatement支持动态设 ...

  10. 微信公众号支付 redirect_uri 参数错误

    登录微信公众平台 1.配置 公众号设置-功能设置 JS接口安全域名 网页授权域名 2.配置 微信支付-开发配置 支付授权目录 测试授权目录 测试白名单