动态 Json忽略列表中的属性



我正在使用 JSON.Net 库。我有一些看起来像这样的 JSON:

"Templates": [
    {
        "Name": "Default Fields 1",
        "Fields": [16, 10, 0, 4, 5, 11, 12, 7, 15, 17, 9, 25, 3],
        "Formats": [
            "string", "datetime", "LeftZeroPaddedString13", "2dp", "2dp", "2dp", "2dp", "int", "int",
            "string", "int", "int", "int", "int"
        ]
    },
    {
        "Name": "Default Fields 2",
        "Fields": [3, 25, 9, 17, 15, 7, 12, 11, 5, 4, 0, 10, 16],
        "Formats": [
            "int", "int", "int", "int", "string", "int", "int", "2dp", "2dp", "2dp", "2dp", "LeftZeroPaddedString13",
            "datetime", "string"
        ]
    }]

我正在将其反序列化为以下类中的 Templates 属性:

public class Options
{
    public List<FieldTemplate> Templates { get; set; }
}
public class FieldTemplate
{
    public string Name { get; set; }
    public List<int> Fields { get; set; }
    public List<string> Formats { get; set; }
}

这工作正常,但在某些情况下(并非总是如此),我想防止在再次序列化对象时包含 FieldsFormats 属性(尽管我确实想将 Name 属性保留在序列化输出中)。我考虑过在FieldTemplate中使用ShouldSerializeFields()ShouldSerializeFormats(),然后循环访问对象以设置每个方法都可以读取的布尔属性,但它看起来并不优雅。有没有更好的方法?例如,我可以在Options中设置布尔属性,然后FieldTemplate可以使用这些属性。我不知道该怎么做,甚至不知道是否可能。

最后,

我为想要动态显示/隐藏的每个属性使用了一个带有开关的静态类:

public class FieldTemplate_JSONSerialization_Switches
{
    public static bool Fields = true;
    public static bool Formats = true;
}
public class Options
{
    public List<FieldTemplate> Templates { get; set; }
}
public class FieldTemplate
{
    public string Name { get; set; }
    public List<int> Fields { get; set; }
    public List<string> Formats { get; set; }
    // instructions to Json.NET
    public bool ShouldSerializeFields()
    {
        return FieldTemplate_JSONSerialization_Switches.Fields;
    }
    public bool ShouldSerializeFormats()
    {
        return FieldTemplate_JSONSerialization_Switches.Formats;
    }
}

然后从其他地方我可以启用/禁用这些属性:

if (condition)
{
    FieldTemplate_JSONSerialization_Switches.Fields = true;
    FieldTemplate_JSONSerialization_Switches.Formats = false;
}
else
{
    FieldTemplate_JSONSerialization_Switches.Fields = false;
    FieldTemplate_JSONSerialization_Switches.Formats = true;
}

这里有类似的问题和答案。

Json.Net 有关条件属性的文档

编辑要不迭代集合,请创建静态对象并在 ShouldSerializeXYZ() 中检查其属性。

相关内容

  • 没有找到相关文章

最新更新