我正在使用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