CSharp - 在 Json.NET 中,C# 忽略空字段

  显示原文与译文双语对照的内容
53 1

我有一些数据,我必须序列化为 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 - 它取决于使用哪个字段( 例如 ) 。非null默认情况下,我的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"},
}

有简单的方法来实现这个?

时间:原作者:0个回答

54 2

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

但是由于结构是值类型,因此需要用 nullable nullable来获得预期结果:

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

或者使用类而不是结构。

文档: NullValueHandling枚举

原作者:
106 2

还可以将JsonProperty属性应用到相关属性,并将空值处理设置为。请参考下面的示例中的Reference 属性:

注意:将重写属性。

public class Person
{
 public int Id { get; set; }
 [JsonProperty( NullValueHandling = NullValueHandling.Ignore )]
 public int? Reference { get; set; }
 public string Name { get; set; }
}

HTH 。

原作者:
...