文档章节

如何使用json.net忽略类中的属性null

j
 javail
发布于 01/21 16:43
字数 485
阅读 230
收藏 0

行业解决方案、产品招募中!想赚钱就来传!>>>

我正在使用Json.NET将类序列化为JSON。

我有这样的课:

class Test1
{
    [JsonProperty("id")]
    public string ID { get; set; }
    [JsonProperty("label")]
    public string Label { get; set; }
    [JsonProperty("url")]
    public string URL { get; set; }
    [JsonProperty("item")]
    public List<Test2> Test2List { get; set; }
}

我想仅当Test2Listnull时才向Test2List属性添加JsonIgnore()属性。 如果它不为null,那么我想将它包含在我的json中。


#1楼

使用JsonProperty属性的替代解决方案:

[JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
// or
[JsonProperty("property_name", NullValueHandling=NullValueHandling.Ignore)]

// or for all properties in a class
[JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)]

正如在线文档中所见。


#2楼

可以在他们网站上的这个链接中看到(http://james.newtonking.com/archive/2009/10/23/efficient-json-with-json-net-reducing-serialized-json-size.aspx)我支持使用[Default()]指定默认值

取自链接

   public class Invoice
{
  public string Company { get; set; }
  public decimal Amount { get; set; }

  // false is default value of bool
  public bool Paid { get; set; }
  // null is default value of nullable
  public DateTime? PaidDate { get; set; }

  // customize default values
  [DefaultValue(30)]
  public int FollowUpDays { get; set; }
  [DefaultValue("")]
  public string FollowUpEmailAddress { get; set; }
}


Invoice invoice = new Invoice
{
  Company = "Acme Ltd.",
  Amount = 50.0m,
  Paid = false,
  FollowUpDays = 30,
  FollowUpEmailAddress = string.Empty,
  PaidDate = null
};

string included = JsonConvert.SerializeObject(invoice,
  Formatting.Indented,
  new JsonSerializerSettings { });

// {
//   "Company": "Acme Ltd.",
//   "Amount": 50.0,
//   "Paid": false,
//   "PaidDate": null,
//   "FollowUpDays": 30,
//   "FollowUpEmailAddress": ""
// }

string ignored = JsonConvert.SerializeObject(invoice,
  Formatting.Indented,
  new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore });

// {
//   "Company": "Acme Ltd.",
//   "Amount": 50.0
// }

#3楼

与@sirthomas的答案类似,JSON.NET也尊重DataMemberAttributeEmitDefaultValue属性

[DataMember(Name="property_name", EmitDefaultValue=false)]

如果您已在模型类型中使用[DataContract][DataMember]并且不想添加特定于JSON.NET的属性,则可能需要这样做。


#4楼

您可以这样做来忽略您正在序列化的对象中的所有空值,然后任何空属性都不会出现在JSON中

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.NullValueHandling = NullValueHandling.Ignore;
var myJson = JsonConvert.SerializeObject(myObject, settings);

#5楼

适应@Mychief的/ @ amit的答案,但适用于使用VB的人

 Dim JSONOut As String = JsonConvert.SerializeObject(
           myContainerObject, 
           New JsonSerializerSettings With {
                 .NullValueHandling = NullValueHandling.Ignore
               }
  )

请参阅: “对象初始值设定项:命名和匿名类型(Visual Basic)”

https://msdn.microsoft.com/en-us/library/bb385125.aspx

j
粉丝 8
博文 2306
码字总数 0
作品 0
深圳
私信 提问
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.3K
6
Flappy Bird(安卓版)逆向分析(一)

更改每过一关的增长分数 反编译的步骤就不介绍了,我们直接来看反编译得到的文件夹 方法1:在smali目录下,我们看到org/andengine/,可以知晓游戏是由andengine引擎开发的。打开/res/raw/at...

enimey
2014/03/04
5.8K
18
浅入浅出Android(003):使用TextView类构造文本控件

基础: TextView是无法供编辑的。 当我们新建一个项目MyTextView时候,默认的布局(/res/layout/activity_main.xml)中已经有了一个TextView: <TextView 运行效果如下: 修改其文本内容...

樂天
2014/03/22
576
1
CDH5: 使用parcels配置lzo

一、Parcel 部署步骤 1 下载: 首先需要下载 Parcel。下载完成后,Parcel 将驻留在 Cloudera Manager 主机的本地目录中。 2 分配: Parcel 下载后,将分配到群集中的所有主机上并解压缩。 3 激...

cloud-coder
2014/07/01
6.8K
1

没有更多内容

加载失败,请刷新页面

加载更多

Linux拜拜!微软给WSL加入GPU支持,Windows终于迎来命令行包管理工具

点击蓝字“ 大白技术控 ”关注我哟 加个“星标★”,每日良时,好文必达! 白交 发自 凹非寺 量子位 报道 | 公众号 QbitAI 看完昨晚微软Build大会,虽然开发者不能亲自到现场,但看到WSL更新...

大白技术控
05/25
0
0
GraphQL

网文、分享汇总 干货分享 | GraphQL 数据聚合层 http://www.sohu.com/a/235978606_205771 awesome-graphql https://github.com/chentsulin/awesome-graphql 一些graphql相关的java项目 周边项......

素雷
8分钟前
4
0
如何在jQuery中选择具有多个类的元素? - How can I select an element with multiple classes in jQuery?

问题: I want to select all the elements that have the two classes a and b . 我想选择具有两个类a和b所有元素。 <element class="a b"> So, only the elements that have both classe......

javail
31分钟前
5
0
MySql查询所有字段不为空值的数据及Mybatis的#号和$符的区别引起的问题

1.MySql查询所有字段不为空值的数据 搜了一上午搜不到,最后用Mybatis的foreach标签,先查询出表字段, SELECT COLUMN_NAMEFROM INFORMATION_SCHEMA.ColumnsWHERE table_name='lltest'...

不忘初心牢记使命
32分钟前
32
0
五分钟搞定WebRTC视频录制

WebRTC中文社区是一个为大家解决在使用WebRTC当中遇到问题所建立的社区,欢迎更多学习和使用WebRTC的人加入进来,一起建设。 视频录制 在之前的文章里我们提到过视频录制的两种方式:客户端录...

死磕音视频
38分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部