问题描述
我使用的字典在Web API项目,这是序列化一样,在JSON:
I used a Dictionary in a Web API project, which is serializing like that in JSON:
{"keyname":{objectvalue},"keyname2:"....
因为我有重复键我便无法使用字典式的多了,反而现在,我使用列表< KeyValuePair<字符串对象>>
Since I have duplicate keys I could't use Dictionary type any more, and instead now I'm using List<KeyValuePair<string,object>>.
但这序列化这种方式:
[{"Key":"keyname","Value":"objectvalue"}...
有没有办法有列表< KeyValuePair>
序列相同的方式来解释呢?
Is there a way to have the List<KeyValuePair>
serialize the same way a dictionary does?
感谢。
推荐答案
如果您使用库中,可以做到以下几点。
If you use the Newtonsoft Json.NET library you can do the following.
定义一个转换器写入键/值对的列表中你想要的方式:
Define a converter to write the list of key/value pairs the way you want:
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>>);
}
}
然后使用转换器:
Then use the converter:
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);
这会产生 [{一:1},{两节 :2},{三:3}]
这篇关于JSON序列化列表与LT; KeyValuePair<字符串对象>>的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!