JSON array to C# Dictionary

21,805

Solution 1

Maybe converting to array of KeyValuePairs will help

using System.Linq;

var list = JsonConvert.DeserializeObject<IEnumerable<KeyValuePair<string, string>>>(jsonContent);
var dictionary = list.ToDictionary(x => x.Key, x => x.Value);

Solution 2

For anyone interested - this works, too:

Example JSON:

[{"device_id":"VC2","command":6,"command_args":"test args10"}, {"device_id":"VC2","command":3,"command_args":"test args9"}]

C#:

JsonConvert.DeserializeObject<List<JObject>>(json)
            .Select(x => x?.ToObject<Dictionary<string, string>>())
            .ToList()

Solution 3

Its quite simple actually :

lets say you get your json in a string like :

string jsonString = @"[{"myKey":"myValue"},
{"anotherKey":"anotherValue"}]";

then you can deserialize it using JSON.NET as follows:

JArray a = JArray.Parse(jsonString);

// dictionary hold the key-value pairs now
Dictionary<string, string> dict = new Dictionary<string, string>();

foreach (JObject o in a.Children<JObject>())
{
    foreach (JProperty p in o.Properties())
    {
        string name = p.Name;
        string value = (string)p.Value;
        dict.Add(name,value);
    }
}

Solution 4

I found that using a list of KeyValuePairs didn't work. I got the right number of elements but they had null Keys and Values.

In the end the only solution that worked for me was deserialising to a list of dictionaries (which each had a single kvp element).

Share:
21,805
bbsimonbb
Author by

bbsimonbb

Lover of the pure non-proprietary web. I'm also very keen on Irish music and Moulton Bicycles. And I would love you to try QueryFirst, frictionless data access for C# projects, which I develop in my spare time.

Updated on July 09, 2022

Comments

  • bbsimonbb
    bbsimonbb almost 2 years

    How do I convert a JSON array like this

    [{"myKey":"myValue"},
    {"anotherKey":"anotherValue"}]
    

    to a C# Dictionary with json.net or system classes.

    json.net can serialize directly to a dictionary, but only if you feed it an object, not an array.