我正在使用JSON.Net库。我有一些JSON看起来像这样:动态JsonIgnore列表中的属性
"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; }
}
这工作得很好,但在某些情况下(不总是)我想要防止Fields
和Formats
属性被包括在我再次序列化对象时(虽然我确实想在序列化输出中保留Name
属性)。我曾考虑在FieldTemplate
之内使用ShouldSerializeFields()
和ShouldSerializeFormats()
,然后遍历该对象以设置每个这些方法都可以读取的布尔属性,但它看起来不够优雅。有没有更好的办法?例如,我可以在Options
中设置布尔属性,然后FieldTemplate
可以使用。我不知道该怎么做,或者即使有可能。
您可以使用自定义合约解析程序来执行此操作。请参阅Andrew Whitaker在[Dynamic json serialization filtering via reflection]中的回答(http://stackoverflow.com/q/28606326/10263);看起来像应该适合您的需求。 –
谢谢@BrianRogers。最后,我接受了Vitaliy的建议并使用了静态课程,因为这更符合我的需求。我会为此发布一个答案。 – mulllhausen