json.net предоставляет механизм десериализации дополнительных свойств. Чтобы использовать его, введите личное свойство и пометьте его JsonExtensionDataAttribute
, чтобы дать десериализатору команду хранить все свойства, которые не могут быть отображены в словаре. Если тип сериализован, все значения в этом словаре также сохраняются. Заполнить словарь расширения соотв. общедоступный словарь вы можете использовать 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++;
}
}