C# 将索引字段名序列化和反序列化到列表

C# 将索引字段名序列化和反序列化到列表,c#,json,serialization,json.net,deserialization,C#,Json,Serialization,Json.net,Deserialization,我使用的Web服务返回(并期望)一些不寻常的JSON格式。它不使用列表或字典,而是使用编号字段模式: { // some normal fields "col0" : "First column name", "val0" : "First value", "col1" : "Second column name", "val1" : "Second value", // ... "coln" : "n-th column name",

我使用的Web服务返回(并期望)一些不寻常的JSON格式。它不使用列表或字典,而是使用编号字段模式:

{
    // some normal fields
    "col0" : "First column name",
    "val0" : "First value",
    "col1" : "Second column name",
    "val1" : "Second value",
    // ...
    "coln" : "n-th column name",
    "valn" : "n-th value"
} 

我想使用json.net将这些值序列化/反序列化到
字典
属性。

json.net提供了一种反序列化其他属性的机制。要使用它,请引入一个私有属性,并用
JsonExtensionDataAttribute
标记它,以指示反序列化程序存储无法映射到SE字典中的所有属性。如果该类型已序列化,则此字典中的所有值也将存储。要填充扩展字典resp。在公共字典中,您可以使用
responseserialized
resp<代码>正在序列化回调

[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++;
    }
}
[JsonIgnore]
公共字典列{get;}=newdictionary();
[JsonExtensionData()]
私有字典\u附加数据{get;set;}
[已序列化]
私有void已序列化(StreamingContext上下文)
{
int i=0;
while(_additionalData.TryGetValue($“col{i}”,out JToken列))
{
var值=_additionalData[$“val{i}”];
Columns.Add(column.ToObject(),value.ToObject());
i++;
}
}
[正在序列化]
私有void onserialization(StreamingContext上下文)
{
int i=0;
_additionalData=新字典();
foreach(列中的变量项)
{
_additionalData.Add($“col{i}”,item.Key);
_additionalData.Add($“val{i}”,item.Value);
i++;
}
}