在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
JSON(全称为JavaScript Object Notation) JSON与XML的比较 2. 如果JSON中含有转义字符,则需要转义。例如文件路径中需要使用"\\"而不是"\"。例如:{ "file":"C:\\a.txt"}。 首先,大家要明白什么是json,了解更多关于json方面资料大家可以点击https://www.ibm.com/developerworks/cn/web/wa-lo-json/ ,我在这里简单介绍下json: JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互。和 XML 一样,JSON 也是基于纯文本的数据格式。由于 JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的 String,Number,Boolean,也可以传输一个数组,或者一个复杂的 Object 对象。 在.NET环境下面,我们使用Json.net来实现JSON数据的序列化和反序列化。 首先点击连接http://sourceforge.net/projects/csjson/?source=dlp 下载JSON .NET插件和代码。 然后在项目中进行引用Newtonsoft.Json.dll 添加命名空间:using Newtonsoft.Json; 下面介绍json序列化和反序列化的放个重要方法和例子: JsonConvert.SerializeObject(object value)序列化,它有个重载方法JsonConvert.SerializeObject(object value, params JsonConverter[] converters)。 首先我们先建一个Person类代码如下: public class Person private int age; 1)序列化 using System;
namespace JSONnet } 输出结果: {"Name":"GoldenEasy","Age":25} 2)反序列化 using System;
namespace JSONnet } 输出结果为:GoldenEasy -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- RestAPI中, 经常需要操作json字符串, 需要把json字符串"反序列化"成一个对象, 也需要把一个对象"序列化"成一字符串。 C# 操作json, 比较简单。 本文介绍几种方法 Json 字符串 反序列化成对象 共需要2步: 第一步:建立相应的实体类 第二步: 调用方法把Json字符串"反序列化"成对象 了解json的语法首先要了解json的语法,这样才能知道怎么创建实体类. Json 的语法很简单, 就四条
创建实体类的例子{"FirstName":"小坦克","LastName":"Tank","Age":30} 相应的实体类可以为 public class Person { public String FirstName { get; set; } public String LastName { get; set; } public int Age { get; set; } } 自动生成JSON的实体类一个复杂的实体类,我们自己去写的话,可能需要1个小时以上。 那有没有工具能直接生成实体类呢,这样能方便太多了。 当然有 http://jsonclassgenerator.codeplex.com/ ----开源的winform工具。 使用第三方工具 Newtonsoft.Json.dll优点: 使用非常方便. 看个例子就知道怎么用了 下载地址 http://james.newtonking.com/json
using System; using System.Collections.Generic; using System.Linq; using System.Text; using Newtonsoft.Json; namespace JsonDemo { class Program { static void Main(string[] args) { string personJson = "{ 'FirstName': '小坦克','LastName':'Tank xiao', 'Age':'30', 'Books':[{'BookName':'c#', 'Price':'29.9'},{'BookName':'Mac编程', 'Price':'39.9'}]}"; string allMoveJson = @"[{ 'FirstName': '小坦克','LastName':'Tank xiao', 'Age':'30', 'Books':[{'BookName':'c#', 'Price':'29.9'},{'BookName':'Mac编程', 'Price':'39.9'}]},{ 'FirstName': '小坦克2','LastName':'Tank xiao2', 'Age':'40', 'Books':[{'BookName':'c#', 'Price':'29.9'},{'BookName':'Mac编程', 'Price':'39.9'}]}]"; // 反序列化 单个对象 Person oneMovie = JsonConvert.DeserializeObject<Person>(personJson); // 反序列化 对象集合 List<Person> allMovie = JsonConvert.DeserializeObject<List<Person>>(allMoveJson); Console.WriteLine(oneMovie.FirstName); Console.WriteLine(allMovie[1].FirstName); // 序列化 string afterJson = JsonConvert.SerializeObject(allMovie); } } public class Person { public String FirstName { get; set; } public String LastName { get; set; } public int Age { get; set; } public List<Book> Books { get; set; } } public class Book { public string BookName { get; set; } public string Price { get; set; } } } ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- C# Json序列化工具 Newtonsoft.Json简介和使用 Newtonsoft.Json,是.Net中开源的Json序列化和反序列化工具,官方地址:http://www.newtonsoft.com/json。 功能比较多,效率比较高,官方给出对比数据 50% faster than DataContractJsonSerializer, and 250% faster than JavaScriptSerializer. 比较常用的功能除了序列化反序列化之外,还有 Linq To Json、Json Path、 XML support等 更多详情参考:http://www.newtonsoft.com/json/help/html/JsonNetVsDotNetSerializers.htm 使用方法简单: 使用命令
Install-Package Newtonsoft.Json
或者右键,项目》Nuget包管理,添加 1.定义类: /// <summary> /// 学生信息实体 /// </summary> public class Student { public int ID { get; set; } public string Name { get; set; } public Class Class { get; set; } } /// <summary> /// 学生班级实体 /// </summary> public class Class { public int ID { get; set; } public string Name { get; set; } }
2.序列化,反序列化 实体对象,实体集合,匿名对象: Student stu = new Student(); stu.ID = 1; stu.Name = "张三"; stu.Class = new Class() { ID = 0121, Name = "CS0121" }; //使用方法1 //实体序列化、反序列化 //结果:{"ID":1,"Name":"张三","Class":{"ID":121,"Name":"CS0121"}} string json1 = JsonConvert.SerializeObject(stu); Console.WriteLine(json1); Student stu2 = JsonConvert.DeserializeObject<Student>(json1); Console.WriteLine(stu2.Name + "---" + stu2.Class.Name); //实体集合,序列化和反序列化 List<Student> stuList = new List<Student>() { stu, stu2 }; string json2 = JsonConvert.SerializeObject(stuList); Console.WriteLine(json2); List<Student> stuList2 = JsonConvert.DeserializeObject<List<Student>>(json2); foreach (var item in stuList2) { Console.WriteLine(item.Name + "----" + item.Class.Name); } //匿名对象的解析, //匿名独享的类型 obj.GetType().Name: "<>f__AnonymousType0`2" var obj = new { ID = 2, Name = "李四" }; string json3 = JsonConvert.SerializeObject(obj); Console.WriteLine(json3); object obj2 = JsonConvert.DeserializeAnonymousType(json3, obj); Console.WriteLine(obj2.GetType().GetProperty("ID").GetValue(obj2)); object obj3 = JsonConvert.DeserializeAnonymousType(json3, new { ID = default(int), Name = default(string) }); Console.WriteLine(obj3.GetType().GetProperty("ID").GetValue(obj3)); //匿名对象解析,可以传入现有类型,进行转换 Student stu3 = new Student(); stu3 = JsonConvert.DeserializeAnonymousType(json3, new Student()); Console.WriteLine(stu3.Name);
更多内容可以参考博客 http://www.cnblogs.com/freshman0216/p/4161800.html |
请发表评论