【C#】解析C#中JSON.NET的使用

目录结构:

contents structure [-]
  1. JSON.NET简介
  2. Serializing and Deserializing JSON
    1. Json Convert
    2. Json Serializer
  3. LINQ TO JSON
  4. Converting XML
    1. Convert JSON to XML
    2. Convert XML to JSON
  5. 原文链接

 

JSON.NET对于.NET来说是一个非常高效的JSON框架。

1. JSON.NET的简介

  • 使用JSON.NET可以很方便的实现.NET对象和JSON对象之间的转化
  • Linq to JSON可以手动读写JSON对象
  • 高性能
  • 可以使用JSON格式的数据读写XML文件
  • 支持.NET2、.NET3.5、.NET4、.NET4.5、Silverlight、Windows Phone 、Windows 8 Store

 

在使用JSON.NET之前应该先引入JSON相应的EXE/DLL模块,比如Newtonsoft.Json文件:

2. Serializing and Deserializing JSON(序列化和反序列化JSON)

使用JSONSerializer可以非常方便的实现.NET对象与Json数据之间的转化,JSONSerializer会把.NET对象的属性名转化为Json数据中的Key,把对象的属性值转化为Json数据中的value。

2.1  JsonConvert

//Convert to Json 
Product product = new Product();product.Name = "Apple";product.ExpiryDate = new DateTime(2008, 12, 28);product.Price = 3.99M;product.Sizes = new string[] { "Small", "Medium", "Large" };string output = JsonConvert.SerializeObject(product);
//{
//  "Name": "Apple",
//  "ExpiryDate": "2008-12-28T00:00:00",
//  "Price": 3.99,
//  "Sizes": [
//    "Small",
//    "Medium",
//    "Large"
//  ]
//}//Convert to Object
Product deserializedProduct = JsonConvert.DeserializeObject<Product>(output);

 

2.2 JsonSerializer

JsonSerializer可以直接通过流的方式来操作JSON数据。

将对象转化为JSON格式的字符串,然后存储到本地:

Product product = new Product();
product.ExpiryDate = new DateTime(2008, 12, 28);JsonSerializer serializer = new JsonSerializer();
serializer.Converters.Add(new JavaScriptDateTimeConverter());//指定转化日期的格式
serializer.NullValueHandling = NullValueHandling.Ignore;//忽略空值using (StreamWriter sw = new StreamWriter(@"d:\json.txt"))
using (JsonWriter writer = new JsonTextWriter(sw))
{serializer.Serialize(writer, product);// {"ExpiryDate":new Date(1230375600000),"Price":0}
}

将本地文件中的Json格式数据,转化为JObject对象:

JsonSerializer serializer = new JsonSerializer();
serializer.Converters.Add(new JavaScriptDateTimeConverter());//指定转化日期的格式
serializer.NullValueHandling = NullValueHandling.Ignore;//忽略空值using (StreamReader sr = new StreamReader(@"d:\json.txt"))
using (JsonReader reader= new JsonTextReader(sr))
{JObject jo =(JObject) serializer.Deserialize(reader);
//    {
//  "Name": null,
//  "ExpiryDate": "2008-12-28T00:00:00",
//  "Price": 0.0,
//  "Sizes": null
//}
}

案例中的 serializer.NullValueHandling = NullValueHandling.Ignore 表示忽略空值,也就是为null值的属性不转化,需要注意Decimal的默认值不是null,而是0。

3.LINQ to JSON

Linq to Json可以非常快速的从JObject对象中查询数据,以及创建JObject对象。

// create JObject
JObject o = JObject.Parse(@"{'CPU': 'Intel','Drives': ['DVD read/writer','500 gigabyte hard drive']}");
// query JObject
string cpu = (string)o["CPU"]; // Intelstring firstDrive = (string)o["Drives"][0]; // DVD read/writer IList<string> allDrives = o["Drives"].Select(t => (string)t).ToList(); // DVD read/writer // 500 gigabyte hard drive

 

4.Converting XML(XML转化)

4.1 Convert JSON to XML

string json = @"{'@Id': 1,'Email': 'james@example.com','Active': true,'CreatedDate': '2013-01-20T00:00:00Z','Roles': ['User','Admin'],'Team': {'@Id': 2,'Name': 'Software Developers','Description': 'Creators of fine software products and services.'}
}";XNode node = JsonConvert.DeserializeXNode(json, "Root");
//<Root Id="1">
//  <Email>james@example.com</Email>
//  <Active>true</Active>
//  <CreatedDate>2013-01-20T00:00:00Z</CreatedDate>
//  <Roles>User</Roles>
//  <Roles>Admin</Roles>
//  <Team Id="2">
//    <Name>Software Developers</Name>
//    <Description>Creators of fine software products and services.</Description>
//  </Team>
//</Root>

4.2 Convert XML to JSON

 string xml = @"<?xml version='1.0' standalone='no'?><root><person id='1'><name>Alan</name><url>http://www.google.com</url></person><person id='2'><name>Louis</name><url>http://www.yahoo.com</url></person>
</root>";XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);string json = JsonConvert.SerializeXmlNode(doc);Console.WriteLine(json);
// {
//   "?xml": {
//     "@version": "1.0",
//     "@standalone": "no"
//   },
//   "root": {
//     "person": [
//       {
//         "@id": "1",
//         "name": "Alan",
//         "url": "http://www.google.com"
//       },
//       {
//         "@id": "2",
//         "name": "Louis",
//         "url": "http://www.yahoo.com"
//       }
//     ]
//   }
// }

 

5.原文链接

JSON.NET Document

转载于:https://www.cnblogs.com/HDK2016/p/7955179.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/267994.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android闹钟唤醒不准的原因_俄罗斯睡眠专家:闹钟铃声选错了,可能扰乱你的内分泌...

对不少人来说&#xff0c;起床是件和天性对抗的事。而“自然醒”和“被闹钟吵醒”&#xff0c;完全是两种不同的睡眠体验。近日&#xff0c;俄罗斯一项新研究指出&#xff0c;错误的闹铃声可能给健康带来负面影响。《生命时报》结合研究采访专家&#xff0c;解读闹铃声对身体的…

软件工程个人作业01

|小学生四则运算| 设计思想&#xff1a; 1 程序生成数据&#xff0c;并存到数据库Mysql; 2用户输入数据 3程序接收数据&#xff0c;并判断数据 4返回信息。 源程序代码&#xff1a; java文件 package pers.sun.operateion;//产生一个算式&#xff0c;及相应的结果public class …

db设计专用excel_工程师必备:硬件EMC设计规范

一引言广义的电磁兼容控制技术包括抑制干扰源的发射和提高干扰接收器的敏感度&#xff0c;我们都知道干扰源、干扰传输途径和干扰接收器是电磁干扰的三要素&#xff0c;同时EMC也是围绕这些问题进行研究&#xff0c;而运用最为广泛的抑制方法是屏蔽、滤波和接地&#xff0c;用它…

快速手动替换 Windows 7 系统字体

自从发现 GDI 这个能把 Windows 字体显示效果变得更平滑的软件之后&#xff0c;就欲罢不能了。借用网上的一张图片&#xff08;来源未知&#xff09;&#xff0c;对比了 Windows 标准、Windows Cleartype、GDI 和 Mac OS 四种情况下的字体效果&#xff0c;很明显 GDI 的效果非常…

使用说明 思迅收银系统_便利店收银使用的收银系统应该取决于什么?

生活中&#xff0c;我们常见的便利店规模可大可小&#xff0c;比如最小就十平米&#xff0c;大的话也有可能会好几百平米&#xff0c;有些人疑惑&#xff0c;到底便利店该不该使用收银系统&#xff0c;又或者该如何选择合适的收银系统。其实&#xff0c;不管如何&#xff0c;只…

MFC+GDI+绘制出雷达余晖效果

MFCGDI绘制出雷达余晖效果 1.首先要画出静态的坐标轴&#xff0c;用双缓冲方法在onpain消息中绘制。绘制方法都比较简单。声明一个内存DC&#xff0c;绘制一个圆形&#xff0c;再把坐标轴画上去。 void CDlg_RadarScanning::OnPaint() {CPaintDC dc(this); // device context …

如果你们都忘记了鼓励原创,那,我们来 - 2017年度原创IT博主全网评选

2017最后一个月&#xff0c;当全世界都是各种年度总结&#xff0c;奖励的时候&#xff0c;IT博客圈似乎已经被人遗忘。而&#xff0c;那些还在半夜&#xff0c;加班写博客&#xff0c;分享自己经验的热心程序猿们&#xff0c;依然&#xff0c;吭哧吭哧的写着&#xff0c;为了几…

android用户界面-菜单

创建菜单 Creating Menus Android提供了三种基础菜单类型&#xff1a; 选项菜单Options Menu 这是一个活动的主菜单。通过按下设备菜单键来显示它。选项菜单包含两组菜单项&#xff1a; 图标菜单Icon Menu 这个是当用户按下菜单键时最初出现屏幕下方的item集合。它支持最多…

流浪宠物救助网站前端页面_全国爱心人士齐聚鞍山 救助流浪猫狗

入冬之后&#xff0c;流浪猫狗的“吃饭问题”成了众多爱心人士的牵挂。12日上午&#xff0c;来自全国各地的20余位爱心人士&#xff0c;来到宁远镇张忠堡村一流浪猫狗救助站&#xff0c;将价值7000余元的宠物用品捐赠给救助站。当日早上8时许&#xff0c;爱心人士们特意到铁西八…

微信小程序 开发过程中遇到的坑(一)

21241.我们使用app.json文件来对微信小程序进行全局配置&#xff0c;决定页面文件的路径、窗口表现、设置网络超时时间、设置多 tab 的时候在pages中写注释的时候回报错。 例如&#xff1a; {"pages":[//这是首页面"pages/welcome/welcome"] } 此时就会报错…

java 创建日程到期提醒_日程管理工具—Things 3

Mac上最好用的日程管理工具是哪个&#xff1f;Things 3 for Mac是首选&#xff0c;Things3 Mac全新的设计&#xff0c;外观简洁、大气&#xff0c;功能也是非常强大的&#xff0c;让你用一种优雅而直观的方式来管理个人事务&#xff0c;无论在生活还是工作中&#xff0c;都能取…

钢材规格解读的软件_万维软件ERP五金建材行业解决方案

一、五金建材行业的特征&#xff1a;1、企业的规对较小&#xff1a;身为老板却“身兼多职”&#xff0c;采购、销售、发货、出纳啥都做&#xff1b;2、业务非常多样&#xff1a;虽然这类企业规模小&#xff0c;但也涉及到批发、零售、工程(局部工程)、家装等经营型态&#xff0…

duilib学习

记录duilib自学过程。 最近年底公司也没啥事情&#xff0c;自己就想着上网看看duilib怎么制作界面&#xff0c;因为之前想学习一直没时间&#xff0c;现在来看看。 其实学习的就好办法就是看demo&#xff0c;关于duilib网上的学习教程并不多&#xff0c;自己跟着demo敲一遍代…

记:ubuntu下交叉编译arm的链接库

以第三方库libjpeg为例&#xff0c;编译所需要的三步&#xff1a; 1、配置./configure脚本参数&#xff0c; ./configure --prefix/home/huanghaitao/Winshare/jpeg-9c/libjpeg CCarm-linux-gnueabihf-gcc --hostarm-linux --enable-shared --enable-static–prefix&#xff0…

flash 绘图API:绘制弧线

把之前没有记录的笔记都记录一下&#xff0c;顺便方便日后查询。绘制弧线&#xff0c;对于一些制作课件的人来讲会有一些用处的。绘制弧线采用的基本思路是采用描点的方法实现。从一个开始角度&#xff0c;到另一个角度结束&#xff0c;在这个角度区间里面进行描点连线。 【A&a…

关于SDL SDL_CreateWindowFrom和SDL_DestroyWindow第二次后无法将视频显示出来。

最近自己用QT搞一个监控平台的程序UI&#xff0c;然后后台一些视频处理是使用FFMPEG和SDL来做的。 在关闭播放窗口SDL_DestroyWindow后&#xff0c;再次去显示视频就会发现显示不出来。代码如下 int SDLPlayer::SDLPlay() {SDL_Window *sdlScreen{ NULL };//窗口SDL_Renderer*…

vos限制客户呼出时间

问题&#xff1a; 公司希望自己的卡线晚上 21&#xff1a;00-24&#xff1a;00 早上00&#xff1a;00-7&#xff1a;30不能打出电话&#xff0c;以防遭投拆&#xff0c; 那么如何设置&#xff1f; 方法&#xff1a; 找到客户使用的落地网关&#xff0c; 落地网关——补充设置…

QT-监视平台

空余时间学习QT的UI&#xff0c;做了一个监视平台&#xff0c;直接上图。 页面1&#xff1a;视频监控 页面2&#xff1a;视频回放 页面3&#xff1a;系统设置 未完成。。。。。。。。 做的不好的地方请大家指正&#xff0c;项目现在还在开发阶段&#xff0c;仅供学习参考…

Orchard架构介绍

在如何使用Orchard搭建敏捷个人的网站&#xff08;2&#xff09;中 介绍了如何使用Orchard&#xff0c;但对于我们来说&#xff0c;更重要的是学习Orchard是如何架构的&#xff0c;如果我们自己编写一个类似应用该如何做。今天有空再次看看 Orchard的其它内容&#xff0c;本篇介…

【服务器】一次对Close_Wait 状态故障的排查经历

最近接连听说一台线上服务器总是不响应客户端请求。 登录服务器后查询iis状态&#xff0c;发现应用程序池状态变为已停止。 按经验想&#xff0c;重启后应该就ok&#xff0c;第一次遇到也确实起了作用&#xff0c;当时完全没在意&#xff0c;以为是其他人无意把服务关闭了而已。…