Serialize .NET Dictionary<string, string> into JSON Key Value Pair Object Serialize .NET Dictionary<string, string> into JSON Key Value Pair Object json json

Serialize .NET Dictionary<string, string> into JSON Key Value Pair Object


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

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.

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( ) );

Hope that helps.

EDIT

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( ) );

This will get you the output

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