问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

哪位大侠能给我发个构建和解析json的类

发布网友 发布时间:2022-05-10 15:15

我来回答

1个回答

热心网友 时间:2023-10-13 03:39

一个.NET通用JSON解析/构建类的实现(c#)
此文内容已过期,现在可使用Newtonsoft.Json库来序列化/反序列化JSON(http://james.newtonking.com/json)。

在.NET Framework 3.5中已经提供了一个JSON对象的序列化工具,但是他是强类型的,必须先按JSON对象的格式定义一个类型,并将类型加上JSON序列化特性。本文将试图提供一个高度灵活的JSON通用类型(JsonObject),实现对JSON的解析及序列化。
假设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来构建,可选择以下三种方式:
方式一:
隐藏行号 复制代码 ?C#
//通过标准构造函数

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");

方式二:
隐藏行号 复制代码 ?C#
//通过回调函数简化对象的构建

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");

});

方式三:
隐藏行号 复制代码 ?C#
//通过字符串构建Json对象

JsonObject newObj = new JsonObject(jsonStr);

获取Json对象属性值的方法,也有三种方式:
隐藏行号 复制代码 ?C#
//通过泛型函数

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字符串:
隐藏行号 复制代码 ?C#
String jsonStr = json.ToString();

注意:
我在重载ToString函数时,并没有将字符串转换为JavsScript字符串类型(即对需要转义的字符的处理),当然,要实现也是极其简单的。另外,对于带String参数的ToString,我也为做特殊处理,感兴趣的朋友可自行实现。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
王卡专属免流包是什么意思 腾讯王卡专属流量是什么意思 人防临空墙排烟机房可以留洞吗? 瑞士转机的问题? 雅阁、第九代凯美瑞、迈腾,大空间的中级车推荐 云顶之弈双人排位介绍 金铲铲之战 金铲铲段位相差多少可以一起打? 现在上海办理居住证需要本人去吗 34周加5天是几个月 孕34周是几个月了 孕34周如何预防早产 json解析出来是这玩意,怎么搞 程序员用什么看json结构 添越油耗多少一公里 宝骏510仪表盘显示发动机故障灯亮黄灯,电子转向锁上锁失败什么原因? 怀孕三个月检查甲功五项ft3和ft4偏高怎么办 美的空调从那看出是几匹的 宾利添越哪个颜色最好看? 怀孕,促甲状腺素过高怎么办 做孕前检查,说甲状腺激素偏高,需要吃什么啊? 宾利添越做一个油漆面多少钱? 孕妇晚期甲状腺功能四项 里面促甲状腺激素偏高怎么回事?应注意什么? 35马力,是多少匹马力 请问一下孕期第一次检查甲功促甲状腺素偏高,怎么办? 孕早期促甲状腺素激素偏高有什么影响,怎么治疗? 孕期促甲状腺激素偏高 孕38周检查甲功五项,促甲状腺素偏高,怎么办 宝骏510仪表盘上出现红圆圈感叹号和n一直闪烁且车子走不动了是什么原因?_百度问一问 最高降11万,奥迪A6L凭价格登顶销量冠军宝座,首付低至4万 孕期促甲状腺激素过高怎么办? 宝骏510仪表上有没有显示挡? 哈西到太平机场大巴时间是多少? 机场有到哈西直达车吗? 台式电脑cpu,显卡,主板,硬盘一般正常多少度?一般不能超过多少度? 太平机场到哈尔滨西站有大巴吗,有的话大约多长时间到 现在哈尔滨西站有到机场大巴车吗? js FileReader读取的文件内容怎么改变编码格式 有到哈尔滨西站的机场大巴吗? java 读取文件流乱码输出乱码 微信登陆以后显示数据加载失败怎么回事 java 文件IO 读取乱码问题 从文件读入数据再显示出来出现乱码(急,当天解决) C语言文件读取乱码问题。 c语言读取文件数据乱码 有什么空气净化器型号推荐吗? 大米包装袋图片伸请专利后未在上面注明,别人仿照后是否侵权 java在mac上编译了读文件的一段代码出现乱码 一叶子海报双十一一般投多少张到市场,公交站牌投放多少张海报合适_百度问一问 台式机一般CPU 显卡 主硬盘 主板温度 各是什么温度算正常的? 台式机主板温度多少算正常 主板温度多少算是正常?台式机