C# 忽略Json.net中的空字段

C# 忽略Json.net中的空字段,c#,.net,json,serialization,json.net,C#,.net,Json,Serialization,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输出只需要

我有一些数据需要序列化为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},
}
{
    "Field2": {"Subfield1": "test1", "Subfield2": "test2"},
    "Field3": {}
}
我知道我可以使用
NullValueHandling.Ignore
,但这给了我类似以下的JSON:

{
    "Field1": null,
    "Field2": {"Subfield1": "test1", "Subfield2": "test2"},
    "Field3": {"Subfield1": null, "Subfield2": null},
}
{
    "Field2": {"Subfield1": "test1", "Subfield2": "test2"},
    "Field3": {}
}
我需要的是:

{
    "Field2": {"Subfield1": "test1", "Subfield2": "test2"},
}

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

是,您需要使用
JsonSerializerSettings.NullValueHandling=NullValueHandling.Ignore

但因为需要将Field2、Field3标记为null才能获得预期结果:

public struct structA
{
    public string Field1;
    public structB? Field2;
    public structB? Field3;
}
或者只使用类而不是结构


文档:

您还可以将JsonProperty属性应用于相关属性,并以这种方式设置空值处理。请参阅下例中的
参考
属性:

注意:
JsonSerializerSettings
将覆盖这些属性

Hth.

有关更多信息,请参阅可能的副本