博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JSON.NET 使用技巧
阅读量:7156 次
发布时间:2019-06-29

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

原文:

1. 序列化相关技巧

忽略某些属性

有时候我们会有这样的需求,我们只需要序列化实体类中的一部分属性,这时候我们可以通过声明忽略掉一些我们不需要序列化的属性,有两种方式可以使用么达到这个目标:

首先,可以考虑使用JsonIgnore特性修饰不需要进行序列化的属性,如下所示:

public class Employee{	public Guid Id { get; set; }    public string FirstName { get; set; }    public string LastName { get; set; }    public string Email { get; set; }    public decimal Salary { get; set; }    public string Phone { get; set; }	[JsonIgnore]    public DateTime HireDate { get; set; }}

运行程序:

var employeeBean = new EmployeeBean(){	Id = Guid.NewGuid(),	Name = "gyzhao",	Email = "gyzhao@gyzhao.com",	Salary = 10000,	Phone = "13912390987",	HireDate = new DateTime(2012, 2, 1)};var jsonString = JsonConvert.SerializeObject(employeeBean, Formatting.Indented);//输出://{//  "Id": "69a406ad-902c-45d3-8ba7-89a09779ed52",//  "Name": "gyzhao",//  "Email": "gyzhao@gyzhao.com",//  "Salary": 10000.0,//  "Phone": "13912390987"//}

如果说你需要序列化的类有很多的属性,而你是需要使用其中的一小部分,如果使用上面的上面方式就会比较繁琐(因为需要忽略的属性太多了),这时候可以考虑使用DataContract特性修饰被序列化的类,使用DataMember特性修饰需要进行序列化的属性,其他没有该特性属性会被自动忽略掉。如下所示:

[DataContract]public class EmployeeBean{	[DataMember]	public Guid Id { get; set; }    [DataMember]    public string Name { get; set; }    [DataMember]    public string Email { get; set; }    [DataMember]    public decimal Salary { get; set; }    public string Phone { get; set; }    public DateTime? HireDate { get; set; }}

运行程序:

var employeeBean = new EmployeeBean(){	Id = Guid.NewGuid(),	Name = "gyzhao",	Email = "gyzhao@gyzhao.com",	Salary = 10000,	Phone = "13912390987",	HireDate = new DateTime(2012, 2, 1)};var jsonString = JsonConvert.SerializeObject(employeeBean, Formatting.Indented);//输出://{//  "Id": "69a406ad-902c-45d3-8ba7-89a09779ed52",//  "Name": "gyzhao",//  "Email": "gyzhao@gyzhao.com",//  "Salary": 10000.0//}

DataContract特性和DataMember特性都从属于: System.Runtime.Serialization命名空间。

序列化对象时循环引用异常的解决办法

序列化一个对象时,如果该对象有一个集合属性,改集合的类型就是对象本身的话,默认序列化的方法会报一个循环引用的异常,如果需要序列化,只需声明下面的属性即可:

JsonConvert.SerializeObject(result,new JsonSerializerSettings{ReferenceLoopHandling=ReferenceLoopHandling.Serialize})

2. 反序列化相关技巧

2.1 使用匿名类型作为反序列化实体

var jsonString = @"{                    'Id': '69a406ad-902c-45d3-8ba7-89a09779ed52',                    'Name': 'gyzhao',                    'Salary': 10000.0,                    'HireDate': '2012-02-01T00:00:00'                   }";var employee = new                {                    Name = default(string),                    Salary = default(decimal),                    HireDate = default(DateTime),                    Id = default(Guid)                };var employeeBean = JsonConvert.DeserializeAnonymousType(jsonString, employee);

3. 创建JSON

//命令式的创建JSON对象        var array = new JArray();        var text = new JValue("Manual text");        var date = new JValue(DateTime.Now);        array.Add(text);        array.Add(date);        Console.WriteLine(array.ToString());        //使用声明式的语法        var rss =            new JObject(                new JProperty("channel", new JObject(                    new JProperty("title", "James Nexton-king"),                    new JProperty("link", "http://james.newtonking.com"),                    new JProperty("description", "James Newton-Kin's blog."),                    new JProperty("item", "BB"))));        Console.WriteLine(rss.ToString());        //通过一个匿名对象创建JSON        JObject o = JObject.FromObject(new        {            channel = new            {                title = "James Newton-king",                link = "http://james.netwoing.com",                item = new List
() { "A", "B", "C", "D", "E" } } }); Console.WriteLine(o.ToString());

参考&进一步阅读

转载地址:http://zwegl.baihongyu.com/

你可能感兴趣的文章
【转】Windows驱动开发如何入门
查看>>
python学习------模块
查看>>
前端js框架引入管理bundle.js
查看>>
vs2015 + opencv3.4.0 + qt msvc2015_64-5.7.1
查看>>
[c语言]左移和右移
查看>>
[HAOI2008]排名系统 & [Zjoi2006]GameZ游戏排名系统 BZOJ1862&BZOJ1056
查看>>
电子商城实录------载入数据库模型
查看>>
iOS上的反射用法
查看>>
python之路-09-文件操作
查看>>
Linux常用命令大全
查看>>
链表API
查看>>
table中绝对定位元素相对td定位失效解决方案
查看>>
打印和显示特殊需求
查看>>
python实现二分查找算法
查看>>
NYOJ747
查看>>
结构体之间的转换
查看>>
Oracle中逻辑结构图解
查看>>
java08双重循环打印图形
查看>>
面向对象03
查看>>
融资融券委托业务
查看>>