c# - 忽略 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 输出只需要 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"},
}

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

最佳答案

是的,您需要使用 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

https://stackoverflow.com/questions/9819640/

相关文章:

javascript - 字符串化(转换为 JSON)具有循环引用的 JavaScript 对象

json - 记录 JSON 结构的语法

jquery - 如何使用 JQuery 发布 JSON 数据?

javascript - 什么是 "top level JSON arrays",为什么它们存在安全

java - 用于 Java 的 JWT(JSON Web token )库

security - JSONP 可以安全使用吗?

c# - 使用 .NET 4.0 任务模式使用 HTTPClient .ReadAsAsync 将

android - 获取没有数组名称的 JSONArray?

c - 使用 C 解析 JSON

c# - 如何将对象传递给 HttpClient.PostAsync 并序列化为 JSON 主体?