忽略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输出只需要Field1
或Field2
或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
。
但是因为结构是值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; } }
心连心。