博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【C#】解析C#中JSON.NET的使用
阅读量:4308 次
发布时间:2019-06-06

本文共 4085 字,大约阅读时间需要 13 分钟。

目录结构:

contents structure
[-]

 

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 ObjectProduct deserializedProduct = JsonConvert.DeserializeObject
(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/writerIList
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");//
//
james@example.com
//
true
//
2013-01-20T00:00:00Z
//
User
//
Admin
//
//
Software Developers
//
Creators of fine software products and services.
//
//

4.2 Convert XML to JSON

string xml = @"
Alan
http://www.google.com
Louis
http://www.yahoo.com
";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.原文链接

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

你可能感兴趣的文章
如何开始DDD(完)
查看>>
[svc]gns3模拟器及探讨几个bgp问题
查看>>
Error:fatal: Not a git repository (or any of the parent directories): .git
查看>>
韩顺平循序渐进学java 第13讲 抽象类.接口
查看>>
Uva489
查看>>
【原创】ABAP动态编程之功能实现
查看>>
Thinkphp编辑器扩展类kindeditor用法
查看>>
R语言数据去重
查看>>
oracle中使用子查询为何取到大于自然数1 rownum 浅度解析
查看>>
JAVA编码(41)—— 线程池队列执行任务(ThreadPoolQueue)(1)
查看>>
64位进程和32位进程通信问题,接收端收不到 SendMessage发送的消息
查看>>
20159320《网络攻防实践》第5周教材总结
查看>>
git的入门摸索和入门研究
查看>>
单例模式
查看>>
黑马程序员——————> 多线程
查看>>
Bootstrap系列 -- 41. 带表单的导航条
查看>>
Python---时间函数
查看>>
maven必知必会
查看>>
最小生成树
查看>>
获取网址中参数的方式
查看>>