如何忽略Json.net中的空字段?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (45)

我有一些数据必须序列化为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输出只需要具有Field1OR Field2OR 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"},
}

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

提问于
用户回答回答于

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

但是因为结构是值类型,所以需要标记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; }
}

扫码关注云+社区