序列化 .NET Dictionary<string, string>进入 JSON 键值对对象 [英] Serialize .NET Dictionary&lt;string, string&gt; into JSON Key Value Pair Object

查看:52
本文介绍了序列化 .NET Dictionary<string, string>进入 JSON 键值对对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要:

public class Package
{
    public Package()
    {
        name = "";
        type = new List<Dictionary<string, string>>();
    }

    public string name { get; set; }
    public List<Dictionary<string, string>> type { get; set; }
}

进入:

{
    "name":"package_name",
    "type":
    {
        "http://random.url.as.key":"random/value"
    }
}

与:

Package package = new Package();
package.name = "package_name";
package.type.Add(new Dictionary<string, string>() { { "http://random.url.as.key", "random/value" } });

我明白了:

{
    "name":"package_name",
    "type":
    [
        [
            {
                "Key":"http://random.url.as.key",
                "Value":"random/value"
            }
        ]
    ]
}

同时,与:

var package = new
{
    name = "package_name",
    type = new
    {
        http_random_url_as_key = "random/value"
    }
};

我明白了:

{
    "name":"package_name",
    "type":
    {
        "http_random_url_as_key":"random/value"
    }
}

我无法获得所需的 http://random.url.as.key.我曾尝试使用 JavaScriptSerializer、DataContractJsonSerializer、自定义转换器用于 Json.NET,但都取得了有限的成功/缺点.

I can't get the obsure http://random.url.as.key that I need. I have tried using JavaScriptSerializer, DataContractJsonSerializer, and Custom Convertor for Json.NET, all with limited success/shortcomings.

必须有更好的方法/我忽略的东西来通过网络获得一个简单的 JSON 对象!

There must be a better way/something I'm overlooking to get a simple JSON Object over the wire!

推荐答案

好吧,首先,对于第一个示例,您基本上拥有的是 KeyValuePair 集合的列表对象.

Well, first off, for the first example, what you basically have is a list of collections of KeyValuePair<string,string> objects.

所以,它被转换为显示的 JSON 的原因是:

So, the reason that it gets converted to the JSON shown is this:

{
    "name":"package_name",
    "type":
    [ // List<Dictionary<string,string>>
        [ // Dictionary<string,string>, a list of KeyValuePair<string,string> objects
            { // KeyValuePair<string,string> object 
                "Key":"http://random.url.as.key",
                "Value":"random/value"
            }
        ]
    ]
}

就您的第二个示例而言,您正在创建一个动态对象,其中包含一个动态对象,并且该对象的每个字段都是提供键值的内容.

As far as your second example, you are creating a dynamic object, containing a dynamic object, and each of the object's fields are what are providing the key value.

因此,我建议在 Dictionary 周围丢弃外部 List<>,然后使用 Newtonsoft.Json.进行序列化时,JSON.Net 库中的 Converters.KeyValuePairConverter 对象:

So, I would suggest ditching the outer List<> around the Dictionary<string,string>, then make use of the Newtonsoft.Json.Converters.KeyValuePairConverter object in the JSON.Net library when doing your serialization:

string json = JsonConvert.SerializeObject( package, new KeyValuePairConverter( ) );

希望有所帮助.

编辑

好吧,我想我应该举一个更具体的例子

Okay, so I figured I should give a more concrete example

public class Package
{
    public Package()
    {
        name = "";
        type = new Dictionary<string, string>();
    }

    public string name { get; set; }
    public Dictionary<string, string> type { get; set; }
}

Package package = new Package();
package.name = "package_name";
package.type.Add("http://random.url.as.key", "random/value");
string json = JsonConvert.SerializeObject( package, new KeyValuePairConverter( ) );

这将为您提供输出

{
    "name":"package_name",
    "type":
    {
        "http://random.url.as.key":"random/value"
    }
}

这篇关于序列化 .NET Dictionary<string, string>进入 JSON 键值对对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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