一个.NET通用JSON解析/构建类的实现(c#)
一个.NET通用JSON解析/构建类的实现(c#)
在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加上JSON序列化特性。本文将 试图提供一个高度灵活的JSON通用类型(JsonObject),实现对JSON的解析及序列化。
假设JSON对象内容如下:
{
orders: {
date: '21:31:59',
name: 'Xfrog',
books: [{
name: 'C# 网络核心编程',
publish: '2010-3-24'
}, {
name: 'C#入门经典中文版',
publish: '2009-10-16'
}]
},
blog: 'http://www.cnblogs.com/xfrog'
}
使用JsonObject来构建,可选择以下三种方式:
方式一:
//通过标准构造函数
JsonObject json = new JsonObject();
json["orders"] = new JsonProperty(new JsonObject());
json["blog"] = new JsonProperty("http://www.cnblogs.com/xfrog");
JsonObject config = json.Properties<JsonObject>("orders");
json["orders"]["date"] = new JsonProperty(DateTime.Now.ToLongTimeString());
json["orders"]["name"] = new JsonProperty("Xfrog");
json["orders"]["books"] = new JsonProperty();
JsonProperty book = json["orders"]["books"].Add(new JsonObject());
book["name"] = new JsonProperty("C# 网络核心编程");
book["publish"] = new JsonProperty("2010-3-24");
book = json["orders"]["books"].Add(new JsonObject());
book["name"] = new JsonProperty("C#入门经典中文版");
book["publish"] = new JsonProperty("2009-10-16");
方式二:
//通过回调函数简化对象的构建
JsonObject json2 = new JsonObject((a) =>
{
a["orders"] = new JsonProperty(new JsonObject((b) =>
{
b["date"] = new JsonProperty(DateTime.Now.ToLongTimeString());
b["name"] = new JsonProperty("Xfrog");
b["books"] = new JsonProperty();
b["books"].Add(new JsonObject((c) =>
{
c["name"] = new JsonProperty("C# 网络核心编程");
c["publish"] = new JsonProperty("2010-3-24");
}));
b["books"].Add(new JsonObject((c) =>
{
c["name"] = new JsonProperty("C#入门经典中文版");
c["publish"] = new JsonProperty("2009-10-16");
}));
}));
a["blog"] = new JsonProperty("http://www.cnblogs.com/xfrog");
});
方式三:
//通过字符串构建Json对象
JsonObject newObj = new JsonObject(jsonStr);
获取Json对象属性值的方法,也有三种方式:
//通过泛型函数
Console.WriteLine(newObj["orders"].GetValue<JsonObject>()["books"].GetValue<List<JsonProperty>>()[1].GetValue<JsonObject>()["name"].Value);
//通过属性类型对应的属性
Console.WriteLine(newObj["orders"].Object["books"].Items[1].Object["name"].Value);
//如果属性为对象类型,可通过字符串索引简化
Console.WriteLine(newObj["orders"]["books"][1]["name"].Value);
直接使用ToString函数,将JsonObject转换为Json字符串:
String jsonStr = json.ToString();
注意:
我在重载ToString函数时,并没有将字符串转换为JavsScript字符串类型(即对需要转义的字符的处理),当然,要实现也是极其简单的。另外,对于带String参数的ToString,我也为做特殊处理,感兴趣的朋友可自行实现。
源代码下载
转载于:https://www.cnblogs.com/songtzu/archive/2012/04/10/2440500.html
一个.NET通用JSON解析/构建类的实现(c#)相关推荐
- [Android开发] Json解析工具类,一个类搞定Json的解析
一.简介 利用递归的方式反射解析到bean里面 二.详细代码 1. Json格式 例如服务器指定规定json格式为: {"code": "--" , // 返回 ...
- 自己动手实现一个简单的JSON解析器
1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等.在 ...
- json string 格式_自己动手实现一个简单的JSON解析器
作者:田小波 原文:http://cnblogs.com/nullllun/p/8358146.html 1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数 ...
- 一文吃透Json解析工具类合集(FastJson、Jackson、Gson)
Json解析工具类 前言 一.各个JSON技术的简介 1.1 FastJson角色 1.2 Jackson角色 1.3 Gson角色 二.使用步骤 2.1 引入库 1.FastJson依赖 2.Jac ...
- 手写了一个简单的JSON解析器,网友直乎:牛!
作者 | 田小波 来源 | http://r3m2u.cn/4455O 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 X ...
- java 自定义json解析注解 复杂json解析 工具类
java 自定义json解析注解 复杂json解析 工具类 目录 java 自定义json解析注解 复杂json解析 工具类 1.背景 2.需求-各式各样的json 一.一星难度json[json对象 ...
- 一个简单的json解析器
实现一个简单地json解析器. 两部分组成,词法分析.语法分析 词法分析 package com.mahuan.json;import java.util.LinkedList; import jav ...
- IT民工——发一个万能的JSON解析器吧!
前言 之前一直在用Newtonsoft的json解析,但是实在烂的可以!!! 首先,对于unicode无法解析,竟然跟我删除了\u,返回一堆码(\u6211-> 6211),我都火了! 还有,如 ...
- unity3d Json解析工具类
使用到的是Newtonsoft.Json动态库,下载地址: http://www.newtonsoft.com/json using Newtonsoft.Json; using System.Col ...
- 手把手教你实现一个 JSON 解析器!
1. 背景 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.相对于另一种数据交换格式 XML,JSON 有着诸多优点.比如易读性更好,占用空间更少等. 在 ...
最新文章
- 机器学习(11)线性回归(2)实战 -- 正规方程优化、梯度下降优化(波士顿房价预测)
- php 爬虫去重,浅谈动态爬虫与去重(续)
- PHP通过CURL或file_get_contents请求第三方地址
- keil之编辑环境配置
- 使用ASP.NET Core 3.x 构建 RESTful API - 3.4 内容协商
- Qt中QTableWidget用法总结
- 使用js实现换肤功能
- an 转换器_400V耐压场效应管替代IRF730B型号参数,使用在DC-DC电源转换器。_场效应管吧...
- 一般化机器学习与神经网络
- 独家 | 林元庆告别百度
- 蓝桥杯 ALGO-75 算法训练 筛选号码
- linux下syslog命令,syslog命令
- 开机连接WiFi显示无Internet连接但能上网且弹出“MSN中国”网页
- 手机移动开发大作业 -- 仿淘宝app
- 新颖的自我介绍_有关最新颖的自我介绍
- 1、孟子·梁惠王上 孟子·梁惠王下
- 酷柚易汛开源版进销存常见问题解答
- 单位脉冲响应的个人理解
- 国王将金币作为工资,发放给忠诚的骑士。 问题 G: 金币
- 1094 谷歌的招聘(测试点2说明)
热门文章
- ffmpeg CLI常用命令
- springboot-增加自定义资源映射
- Exchange 2013CU17和office 365混合部署-设置属性筛选(三)
- 设计模式(六)建造者(创建型)
- 全新Linux+Python高端运维班第一次作业
- 您无权查看或编辑目前的权限设置;但是,您可以取得所有权或更改审核设置
- 一次接口超时排查,花费了我两个星期。。
- 牛逼!Intellij IDEA竟然有个功能可自动生成代码,你用过没?
- 流行的Spring Boot + Vue架构整合开发的网易云+QQ音乐(附源码)!
- 17届互联网校招薪酬报告:白菜价22W,青菜价30W,神价150W