json.net提供了反序列化其他属性的机制。使用它引入私有财产并用
JsonExtensionDataAttribute
指示反序列化程序存储无法映射到SE字典中的所有属性。如果类型是序列化的,则此字典中的所有值也将存储。填充扩展字典resp。你可以使用的公共字典
OnDeserialized
负责人。
OnSerializing
回调。
[JsonIgnore]
public Dictionary < string, string > Columns {get;} = new Dictionary <string, string>();
[JsonExtensionData()]
private Dictionary < string, JToken > _additionalData {get; set;}
[OnDeserialized]
private void OnDeserialized(StreamingContext context)
{
int i = 0;
while (_additionalData.TryGetValue($ "col{i}", out JToken column))
{
var value = _additionalData[$ "val{i}"];
Columns.Add(column.ToObject < string > (), value.ToObject < string > ());
i++;
}
}
[OnSerializing]
private void OnSerializing(StreamingContext context)
{
int i = 0;
_additionalData = new Dictionary < string, JToken > ();
foreach(var item in Columns)
{
_additionalData.Add($ "col{i}", item.Key);
_additionalData.Add($ "val{i}", item.Value);
i++;
}
}