我有一些数据需要序列化为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"},
}
有没有简单的方法来实现这一目标?
答案 0 :(得分:72)
是的,您需要使用JsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore
。
但是因为structs are value types你需要标记Field2,Field3 可以为空以获得预期的结果:
public struct structA
{
public string Field1;
public structB? Field2;
public structB? Field3;
}
或者只使用类而不是结构。
答案 1 :(得分:71)
您还可以将JsonProperty属性应用于相关属性,并以此方式设置null值处理。请参阅以下示例中的Reference
属性:
注意:JsonSerializerSettings
将覆盖属性。
public class Person
{
public int Id { get; set; }
[JsonProperty( NullValueHandling = NullValueHandling.Ignore )]
public int? Reference { get; set; }
public string Name { get; set; }
}
H个。