转自:http://www.cnblogs.com/xfrog/archive/2010/04/07/1706754.html
-
相关阅读:
【bzoj3782】上学路线 dp+容斥原理+Lucas定理+中国剩余定理
【bzoj3210】花神的浇花集会 旋转坐标系
【bzoj3513】[MUTC2013]idiots FFT
【bzoj1043】[HAOI2008]下落的圆盘 计算几何
【bzoj2521】[Shoi2010]最小生成树 网络流最小割
【bzoj4811】[Ynoi2017]由乃的OJ 树链剖分+线段树区间合并
【bzoj2467】[中山市选2010]生成树 矩阵树定理
【bzoj1002】[FJOI2007]轮状病毒 矩阵树定理+高精度
【bzoj4031】[HEOI2015]小Z的房间 矩阵树定理
【bzoj4292】[PA2015]Równanie 暴力
-
原文地址:https://www.cnblogs.com/dwfbenben/p/3169504.html
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,我也为做特殊处理,感兴趣的朋友可自行实现。
【bzoj3210】花神的浇花集会 旋转坐标系
【bzoj3513】[MUTC2013]idiots FFT
【bzoj1043】[HAOI2008]下落的圆盘 计算几何
【bzoj2521】[Shoi2010]最小生成树 网络流最小割
【bzoj4811】[Ynoi2017]由乃的OJ 树链剖分+线段树区间合并
【bzoj2467】[中山市选2010]生成树 矩阵树定理
【bzoj1002】[FJOI2007]轮状病毒 矩阵树定理+高精度
【bzoj4031】[HEOI2015]小Z的房间 矩阵树定理
【bzoj4292】[PA2015]Równanie 暴力
- 最新文章
-
Silverlight & Blend动画设计系列九:动画(Animation)与视图状态管理(Visual State Manager)
Silverlight & Blend动画设计系列八:拖放(Drag-Drop)操作与拖放行为(DragBehavior)
Silverlight & Blend动画设计系列七:模糊效果(BlurEffect)与阴影效果(DropShadowEffect)
Silverlight & Blend动画设计系列六:动画技巧(Animation Techniques)之对象与路径转化、波感特效
Silverlight & Blend动画设计系列五:故事板(StoryBoards)和动画(Animations)
__dict__
函数的设计规范
装饰器
*分解函数参数
请用户输入文件名并检测是否存在,存在就打开并编辑
- 热门文章
-
判断字符串的后缀.endswith()
找出一个文件夹下后缀名为.jpg的文件
定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容。提示(可以了解python的urllib模块)
#定义一个方法get_num(num),num参数是列表类型,判断列表里面的元素为数字类型。其他类型则报错,并且返回一个偶数列表:(注:列表里面的元素为偶数)。
任意字符串参数返回最长的
【bzoj2729】[HNOI2012]排队 组合数学+高精度
【bzoj2111】[ZJOI2010]Perm 排列计数 dp+Lucas定理
【bzoj1042】[HAOI2008]硬币购物 背包dp+容斥原理
【bzoj3505】[Cqoi2014]数三角形 容斥原理
【bzoj2339】[HNOI2011]卡农 dp+容斥原理