JSON

JSON.NET 使用技巧

字号+ 作者:H5之家 来源:H5之家 2015-09-10 13:00 我要评论( )

1. 序列化相关技巧 忽略某些属性有时候我们会有这样的需求,我们只需要序列化实体类中的一部分属性,这时候我们可以通过声明忽略掉一些我们不需要序列化的属性,

JSON.NET 使用技巧

姜糖水 2015-05-03 13 阅读

技巧 json

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", ""), 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 = "", item = new List<string>() { "A", "B", "C", "D", "E" } } }); Console.WriteLine(o.ToString()); 参考&进一步阅读

技巧 json

作者:姜糖水

又一个码农站点

原文地址:JSON.NET 使用技巧, 感谢原作者分享。

→Visual Studio从此走入非Windows程序猿家 ←如何在本地测试微信公众号

发表评论

您可能感兴趣的博客

  • root 发表 2015-05-03 02:14:01 JSON.NET 使用技巧
  • 数码微 发表 2013-03-04 16:47:32 Mac小技巧,让Mac告诉你准确的英文发音
  • 博主 发表 2012-08-22 01:48:00 Rails 项目开发支付宝付款调试过程的技巧
  • dream 发表 2013-03-27 23:44:14 让网站灵敏轻便的几个小技巧
  • admin 发表 2013-05-06 14:20:43 中英文对照:6种技巧简化英语学习过程
  • Li Guangming 发表 2012-07-18 17:57:50 有关Sphinx的wordforms属性设置的小技巧
  • Sana Mithani 发表 2013-06-04 18:11:00 C++ REST SDK 1.0.0 is now available
  • 博主 发表 2013-06-26 21:18:20 快速开发 jQuery 插件的 10 大技巧
  • larryzhao 发表 2013-07-30 03:01:59 用啥来 render json ?
  • 飞鸟寒天 发表 2012-04-15 09:42:08 IIS服务器防黑安全设置技巧
  • 蓝莓绿茶 发表 2013-09-15 11:03:21 网页截图小技巧
  • ShelWee 发表 2013-12-27 12:33:31 LigerUI表格LigerGrid动态结合Struts2获取数据
  • 您可能感兴趣的代码

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • 浅谈使用PHP开发微信支付的流程

      浅谈使用PHP开发微信支付的流程

      2016-02-13 15:00

    • 实用的javascript小技巧

      实用的javascript小技巧

      2016-01-25 19:05

    • ExtAspNet应用技巧(二十二) - Ext4JSLint之JSON文件创建树控件(2)

      ExtAspNet应用技巧(二十二) - Ext4JSLint之JSON文件创建树控件(2)

      2016-01-25 09:02

    • 生成JSON元数据对象的典型技巧

      生成JSON元数据对象的典型技巧

      2016-01-24 16:00

    网友点评