转自: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#

源代码下载

 

一个.NET通用JSON解析/构建类的实现(c#)转的更多相关文章

  1. 一个.NET通用JSON解析/构建类的实…

    一个.NET通用JSON解析/构建类的实现(c#) 在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加 ...

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

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

  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. bootstrap-datetime 的使用

    bootstrap-datetime js的下载 http://pan.baidu.com/s/1eQnE5dK html的代码 <div class="input-group dat ...

  2. HttpURlconntiuon获取网络数据

    package Network; import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream ...

  3. 为windows应用程序提供托盘图标

    1>包含头文件 #include "Shellapi.h"   2>相关结构体和函数:     NOTIFYICONDATA     WINSHELLAPI BOOL ...

  4. Codeforces Round #169 (Div. 2)

    A. Lunch Rush 模拟. B. Little Girl and Game 因为可以打乱顺序,所以只关心每种数字打奇偶性. 若一开始就是回文,即奇数字母为0或1种,则先手获胜. 若奇数字母大于 ...

  5. wince5代码整理

    BAT文件语法: @REM 这是注释标识与REM的区别就是在echo on时REM的注释也会显示出来 @REM 设置变量BSP_SMDK2416为2 set BSP_SMDK2416=2 @REM 设 ...

  6. Python requests 为pfsense 添加Routes

    # !/usr/bin/python 2 # -*- coding: utf-8 -*- __author__ = "Evilxr" import requests ips = o ...

  7. 浏览器与web客户端的HTTP交互过程

    未经许可谢绝以任何形式对本文内容进行转载! HTTP协议是常见的几种应用层协议之一,当我们用浏览器和web客户端进行交互时html页面等内容的传输都是依靠该协议完成的.值得注意的是,HTTP使用的是T ...

  8. 观察者(Observer)模式又名发布-订阅(Publish/Subscribe)模式、模型-视图(View)模式、源-收听者(Listener)模式或从属者模式

    观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己. 抽象主题(Subject):它把所有观察者对 ...

  9. 手把手写一个html_json信息源

    html_json用于从网页里提取json数据. 这里用新浪读书的书讯举个例子,手把手写一个html_json信息源. 打开新浪读书的首页,可以看到页面下方有最新.书讯.童书.小说等几个Tab,这里我 ...

  10. Nginx-Lua模块的执行顺序

    一.nginx执行步骤 nginx在处理每一个用户请求时,都是按照若干个不同的阶段依次处理的,与配置文件上的顺序没有关系,详细内容可以阅读<深入理解nginx:模块开发与架构解析>这本书, ...