一个.NET通用JSON解析/构建类的实现(c#)
此文内容已过期,现在可使用Newtonsoft.Json库来序列化/反序列化JSON(http://james.newtonking.com/json)。
在.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,我也为做特殊处理,感兴趣的朋友可自行实现。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?