C# JSON序列化列表<;KeyValuePair<;字符串,对象>&燃气轮机;
我在一个Web API项目中使用了一个字典,它的序列化方式与JSON中的类似:C# JSON序列化列表<;KeyValuePair<;字符串,对象>&燃气轮机;,c#,json,serialization,C#,Json,Serialization,我在一个Web API项目中使用了一个字典,它的序列化方式与JSON中的类似: {"keyname":{objectvalue},"keyname2:".... 由于我有重复的键,我不能再使用字典类型了,现在我使用的是List. 但这是串行化的方式: [{"Key":"keyname","Value":"objectvalue"}... 有没有办法让列表像字典一样序列化 谢谢。如果您使用该库,您可以执行以下操作 定义一个转换器,以按所需方式写入键/值对列表: class MyConverte
{"keyname":{objectvalue},"keyname2:"....
由于我有重复的键,我不能再使用字典类型了,现在我使用的是List.
但这是串行化的方式:
[{"Key":"keyname","Value":"objectvalue"}...
有没有办法让列表像字典一样序列化
谢谢。如果您使用该库,您可以执行以下操作
定义一个转换器,以按所需方式写入键/值对列表:
class MyConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
List<KeyValuePair<string, object>> list = value as List<KeyValuePair<string, object>>;
writer.WriteStartArray();
foreach (var item in list)
{
writer.WriteStartObject();
writer.WritePropertyName(item.Key);
writer.WriteValue(item.Value);
writer.WriteEndObject();
}
writer.WriteEndArray();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
// TODO...
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(List<KeyValuePair<string, object>>);
}
}
类MyConverter:JsonConverter
{
公共重写void WriteJson(JsonWriter编写器、对象值、JsonSerializer序列化器)
{
列表=作为列表的值;
writer.writestarray();
foreach(列表中的变量项)
{
writer.WriteStartObject();
writer.WritePropertyName(item.Key);
writer.WriteValue(item.Value);
writer.WriteEndObject();
}
writer.WriteEndArray();
}
公共重写对象ReadJson(JsonReader阅读器,类型objectType,对象existingValue,JsonSerializer序列化程序)
{
//待办事项。。。
}
公共覆盖布尔CanConvert(类型objectType)
{
返回objectType==typeof(列表);
}
}
然后使用转换器:
var keyValuePairs = new List<KeyValuePair<string, object>>
{
new KeyValuePair<string, object>("one", 1),
new KeyValuePair<string, object>("two", 2),
new KeyValuePair<string, object>("three", 3)
};
JsonSerializerSettings settings = new JsonSerializerSettings { Converters = new [] {new MyConverter()} };
string json = JsonConvert.SerializeObject(keyValuePairs, settings);
var keyValuePairs=新列表
{
新的KeyValuePair(“一”,1),
新的KeyValuePair(“两个”,2),
新的KeyValuePair(“三”,3)
};
JsonSerializerSettings=new JsonSerializerSettings{Converters=new[]{new MyConverter()};
string json=JsonConvert.SerializeObject(keyValuePairs,设置);
这将生成[{“一”:1}、{“二”:2}、{“三”:3}]
如果您有重复的密钥,no.@user250773:请提供代码和输出。。因此,我们可以尝试帮助您。可能重复的ReadJson方法是否也有一个简单的示例?在使用以下格式将字典的反序列化更改为列表时,我遇到了类似的问题:{“key1”:“test”,“key1”:“12345678”,“key2”:“ABC”}@user250773应该有足够的信息让您到达那里。有关信息,如果您想使用IEnumerable
,可以在方法中使用:CanConvert(Type类型){return GetType(objectType)==typeof(KeyValuePair);
}其中GetType静态类型GetType(Type Type){foreach(Type.GetInterfaces()中的intType类型){if(intType.IsGenericType&&intType.GetGenericTypeDefinition()==typeof(IEnumerable)){return intType.GetGenericArguments()[0];}}}return null;}
voilía ReadJson应该像什么样被覆盖?