首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >JSON序列化List<KeyValuePair<string,object>>

JSON序列化List<KeyValuePair<string,object>>
EN

Stack Overflow用户
提问于 2014-01-09 21:31:09
回答 1查看 41.1K关注 0票数 20

我在一个Web API项目中使用了一个字典,它的序列化方式类似于JSON:

代码语言:javascript
复制
{"keyname":{objectvalue},"keyname2:"....

因为我有重复的键,所以我不能再使用字典类型了,现在我用的是List<KeyValuePair<string,object>>.

但这是以这种方式序列化的:

代码语言:javascript
复制
[{"Key":"keyname","Value":"objectvalue"}...

有没有办法让List<KeyValuePair>像字典一样序列化?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-09 21:53:19

如果使用Newtonsoft Json.NET库,则可以执行以下操作。

定义一个转换器,以便以您想要的方式编写键/值对列表:

代码语言:javascript
复制
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>>);
    }
}

然后使用转换器:

代码语言:javascript
复制
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}]

票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21021655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档