博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个.NET通用JSON解析/构建类的实现(c#)
阅读量:5319 次
发布时间:2019-06-14

本文共 2558 字,大约阅读时间需要 8 分钟。

在.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
    ("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
    ()["books"].GetValue
    >()[1].GetValue
    ()["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 标签: , ,

 

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

你可能感兴趣的文章
软件开发模型之瀑布模型
查看>>
Exception in thread "AWT-EventQueue-0" java.lang.IllegalThreadStateException
查看>>
随手练——HDU 5015 矩阵快速幂
查看>>
Python默认调用路径
查看>>
启动redis一闪就关
查看>>
Maven之setting.xml配置文件详解
查看>>
python简单小常识
查看>>
可视化框架设计-图表类型
查看>>
HDU1823 Luck ans Love 二维线段树
查看>>
富数据控件 DetailsView 和 FormView
查看>>
ASP.NET 4.5 Web Forms and Visual Studio vs2013年入门1
查看>>
JUC - ReentrantLock 的基本用法 以及 lock()、tryLock()、lockInterruptibly()的区别
查看>>
《那一世》
查看>>
迷你DVD管理器
查看>>
从github上下载的ipynb文件的打开方法
查看>>
PAT L2-005 集合相似度(模拟集合set)
查看>>
Unity EditorWindow 笔记
查看>>
java 连接 Access数据库的两种方法
查看>>
SDK目录结构
查看>>
malloc() & free()
查看>>