【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,一经查实,立即删除!

相关文章

用手动和自动分别实现使用其DVD安装盘作为本地yum源

一、手动配置使用dvd作为yum源1、mkdir /media/cdrom #创建挂载点2、mount /dev/cdrom /media/cdrom #挂载光盘3、rpm -qa |grep yum #查看有没有yum4、…

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;为了几…

BZOJ 2599

http://www.lydsy.com/JudgeOnline/problem.php?id2599 就是开一个数组t,t[i]表示权值为i的路径最少边数 点分治&#xff0c;找到树的重心分成若干子树后&#xff0c; 得出一棵子树的所有点到根的路径长度x&#xff0c;到根有a条边&#xff0c;用t[k-x]a更新答案&#xff0c; …

android用户界面-菜单

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

QT打开文件

https://www.cnblogs.com/ZY-Dream/p/10571490.html

12.5

持续关注一下足球经理游戏 转载于:https://www.cnblogs.com/dandansang/p/7980132.html

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

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

问题解决

问题解决了&#xff0c;把 #include <string.h> 改写成 #include <string> 就行了 #include <iostream> #include <string> #include "tinystr.h" #include "tinyxml.h" #include <vector> #include "Text.h" #in…

QT 线程之间通信

1.先说QT线程。都知道QT线程有两种使用方式&#xff0c;一种是继承QThread重写run()&#xff0c;一种是继承QObject然后再MovetoThread()到线程下。我也是刚学QT&#xff0c;之前一直做MFC。现在有个问题&#xff0c;我想要创建的是单次运行的线程&#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;都能取…

数据库优化小结

WHERE条件的优化&#xff1a;1、IN&#xff1a;至少多一个转换的过程&#xff08;先试图转成多个表的连接&#xff0c;如果转换不成功先执行IN里面的子查询&#xff0c;再查询外层记录&#xff09;2、NOTIN&#xff1a;不能应用表索引&#xff0c;可用NOT EXISTS替换的3、<&…

使用VS制作MFC、libmysql.dll出现计算机缺少msvcr120.dll和msvcp120.dll问题

自己应客户要求做了一个数据库的查询工具&#xff0c;结果在客户电脑那边运行出现了计算机缺少msvcr120.dll和msvcp120.dll问题&#xff0c;一开始以为是MFC程序自身有动态链接&#xff0c;结果才发现是libmysql.dll本身依赖于msvcr120.dll和msvcp120.dll&#xff0c;这两个库对…

python 流程控制if判断

简单看下if判断在python的基本用法 # gyf28 定义变量gyf # if gyf > 20: 判断 gyf 是不是〉20# print(你真年轻) 简单实现了 if判断的用法 下面我们再来做一个例子 if判断 gyf是不是〉18 并且〈 22 如果是 则执行打印的任务 输出 表白 如果条件不成立输入打印 阿姨…