JSON序列化列表与LT; KeyValuePair<字符串对象>> [英] JSON Serialize List<KeyValuePair<string, object>>

查看:386
本文介绍了JSON序列化列表与LT; KeyValuePair<字符串对象>>的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的字典在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?

感谢。

推荐答案

如果您使用 Newtonsoft Json.NET 库中,可以做到以下几点。

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&LT;字符串对象&gt;&GT;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆