一个.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<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<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#

源代码下载

转载于:https://www.cnblogs.com/songtzu/archive/2012/04/10/2440500.html

一个.NET通用JSON解析/构建类的实现(c#)相关推荐

  1. [Android开发] Json解析工具类,一个类搞定Json的解析

    一.简介 利用递归的方式反射解析到bean里面 二.详细代码 1. Json格式 例如服务器指定规定json格式为: {"code": "--" , // 返回 ...

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

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

  3. json string 格式_自己动手实现一个简单的JSON解析器

    作者:田小波 原文:http://cnblogs.com/nullllun/p/8358146.html 1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数 ...

  4. 一文吃透Json解析工具类合集(FastJson、Jackson、Gson)

    Json解析工具类 前言 一.各个JSON技术的简介 1.1 FastJson角色 1.2 Jackson角色 1.3 Gson角色 二.使用步骤 2.1 引入库 1.FastJson依赖 2.Jac ...

  5. 手写了一个简单的JSON解析器,网友直乎:牛!

    作者 | 田小波 来源 | http://r3m2u.cn/4455O 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 X ...

  6. java 自定义json解析注解 复杂json解析 工具类

    java 自定义json解析注解 复杂json解析 工具类 目录 java 自定义json解析注解 复杂json解析 工具类 1.背景 2.需求-各式各样的json 一.一星难度json[json对象 ...

  7. 一个简单的json解析器

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

  8. IT民工——发一个万能的JSON解析器吧!

    前言 之前一直在用Newtonsoft的json解析,但是实在烂的可以!!! 首先,对于unicode无法解析,竟然跟我删除了\u,返回一堆码(\u6211-> 6211),我都火了! 还有,如 ...

  9. unity3d Json解析工具类

    使用到的是Newtonsoft.Json动态库,下载地址: http://www.newtonsoft.com/json using Newtonsoft.Json; using System.Col ...

  10. 手把手教你实现一个 JSON 解析器!

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

最新文章

  1. 机器学习(11)线性回归(2)实战 -- 正规方程优化、梯度下降优化(波士顿房价预测)
  2. php 爬虫去重,浅谈动态爬虫与去重(续)
  3. PHP通过CURL或file_get_contents请求第三方地址
  4. keil之编辑环境配置
  5. 使用ASP.NET Core 3.x 构建 RESTful API - 3.4 内容协商
  6. Qt中QTableWidget用法总结
  7. 使用js实现换肤功能
  8. an 转换器_400V耐压场效应管替代IRF730B型号参数,使用在DC-DC电源转换器。_场效应管吧...
  9. 一般化机器学习与神经网络
  10. 独家 | 林元庆告别百度
  11. 蓝桥杯 ALGO-75 算法训练 筛选号码
  12. linux下syslog命令,syslog命令
  13. 开机连接WiFi显示无Internet连接但能上网且弹出“MSN中国”网页
  14. 手机移动开发大作业 -- 仿淘宝app
  15. 新颖的自我介绍_有关最新颖的自我介绍
  16. 1、孟子·梁惠王上 孟子·梁惠王下
  17. 酷柚易汛开源版进销存常见问题解答
  18. 单位脉冲响应的个人理解
  19. 国王将金币作为工资,发放给忠诚的骑士。 问题 G: 金币
  20. 1094 谷歌的招聘(测试点2说明)

热门文章

  1. ffmpeg CLI常用命令
  2. springboot-增加自定义资源映射
  3. Exchange 2013CU17和office 365混合部署-设置属性筛选(三)
  4. 设计模式(六)建造者(创建型)
  5. 全新Linux+Python高端运维班第一次作业
  6. 您无权查看或编辑目前的权限设置;但是,您可以取得所有权或更改审核设置
  7. 一次接口超时排查,花费了我两个星期。。
  8. 牛逼!Intellij IDEA竟然有个功能可自动生成代码,你用过没?
  9. 流行的Spring Boot + Vue架构整合开发的网易云+QQ音乐(附源码)!
  10. 17届互联网校招薪酬报告:白菜价22W,青菜价30W,神价150W