忽略 Json.net 中的空字段
Posted
技术标签:
【中文标题】忽略 Json.net 中的空字段【英文标题】:Ignoring null fields in Json.net 【发布时间】:2012-03-22 09:38:52 【问题描述】:我有一些数据必须序列化为 JSON。我正在使用 JSON.NET。我的代码结构是这样的:
public struct structA
public string Field1;
public structB Field2;
public structB Field3;
public struct structB
public string Subfield1;
public string Subfield2;
问题是,我的 JSON 输出只需要 Field1
或 Field2
或 Field3
- 这取决于使用哪个字段(即不为空)。
默认情况下,我的 JSON 如下所示:
"Field1": null,
"Field2": "Subfield1": "test1", "Subfield2": "test2",
"Field3": "Subfield1": null, "Subfield2": null,
我知道我可以使用NullValueHandling.Ignore
,但这给了我这样的 JSON:
"Field2": "Subfield1": "test1", "Subfield2": "test2",
"Field3":
而我需要的是这个:
"Field2": "Subfield1": "test1", "Subfield2": "test2",
有没有简单的方法来实现这一点?
【问题讨论】:
How to ignore a property in class if null, using json.net的可能重复 因为您使用的是struct
s,所以唯一可能有空值的字段是Field1。如果希望 Field2 和 Field3 可以为空,则需要将它们设为引用类型而不是值类型。
【参考方案1】:
是的,您需要使用JsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore
。
但是因为structs are value types你需要将Field2、Field3标记为nullable才能得到预期的结果:
public struct structA
public string Field1;
public structB? Field2;
public structB? Field3;
或者只使用类而不是结构。
文档:NullValueHandling Enumeration
【讨论】:
更多信息见james.newtonking.com/archive/2009/10/23/…【参考方案2】:您还可以将 JsonProperty 属性应用于相关属性,并以这种方式设置空值处理。请参考以下示例中的Reference
属性:
注意:JsonSerializerSettings
将覆盖属性。
public class Person
public int Id get; set;
[JsonProperty( NullValueHandling = NullValueHandling.Ignore )]
public int? Reference get; set;
public string Name get; set;
【讨论】:
以上是关于忽略 Json.net 中的空字段的主要内容,如果未能解决你的问题,请参考以下文章