【问题标题】:Ignoring null fields in Json.net忽略 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 输出只需要 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"},
}

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

【问题讨论】:

标签: c# .net json serialization json.net


【解决方案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

【讨论】:

【解决方案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; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-27
    • 2023-02-25
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 2016-08-31
    相关资源
    最近更新 更多