忽略Json.net中的空字段

我有一些数据,我必须序列化为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输出只需要Field1Field2Field3 – 它取决于使用哪个字段(即非空)。 默认情况下,我的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"}, } 

有没有简单的方法来实现这一目标?

是的,你需要使用JsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore

但是因为结构是值types您需要标记Field2,Field3为来获得预期的结果:

 public struct structA { public string Field1; public structB? Field2; public structB? Field3; } 

或者只是使用类而不是结构。

文档: NullValueHandling枚举

您也可以将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; } } 

心连心。