我在 Web API 项目中使用了字典,它像 JSON 中那样序列化:
{"keyname":{objectvalue},"keyname2:"....
因为我有重复的键,所以我不能再使用字典类型,而是现在我使用 List<KeyValuePair<string,object>>.
但这是以这种方式序列化:
[{"Key":"keyname","Value":"objectvalue"}...
有没有办法让List<KeyValuePair>
像字典一样序列化?
谢谢。
最佳答案
如果您使用 Newtonsoft Json.NET您可以执行以下操作。
定义一个转换器,以您想要的方式编写键/值对列表:
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>>);
}
}
然后使用转换器:
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);
这会生成 [{"one":1},{"two":2},{"three":3}]
关于c# - JSON 序列化列表<KeyValuePair<string, object>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21021655/