c# - JSON 序列化列表<KeyValuePair<string, object>>

标签 c# json serialization

我在 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/

相关文章:

c# - 从法师签名的 list 文件中获取 X509 证书

c# - UML 帮助 C# 设计原则

c# - c#中的using结构怎么样

python - 使用json文档协议(protocol)的spyne客户端是什么?

ios - 无法将 json 字符串转换为 json 对象

c# - C# Async/Await 是否像中断一样工作?

php - Instagram - 是否可以在不登录的情况下获取用户最近的媒体?

java - 在 Kryo 中序列化和反序列化对象数组

python - 对不是模型的对象使用 Django JSON 序列化程序

java - 通过反序列化创建 Spring bean