C# deserialize multiple JSON collections into a single List<T>

Viewed 2239

I fetch a collection of collections of the same object from a web api. I would then like to deserialize the JSON into a single List

The JSON is as follows:

{
  "Liverpool": [
    {
      "playerId": "LIV01",
      "name": "Adam Llana",
      "position": "Midfielder"
    },
    {
      "playerId": "LIV02",
      "name": "Daniel Sturridge",
      "position": "Forward"
    }
  ],
  "ManchesterUnited": [
    {
      "playerId": "MNU01",
      "name": "Daley Blind",
      "position": "Defender"
    },
    {
      "playerId": "MNU02",
      "name": "Romelu Lukaku",
      "position": "Forward"
    }
  ],
  "Arsenal": [
    {
      "playerId": "ARS01",
      "name": "Petr Cech",
      "position": "Goalkeeper"
    },
    {
      "playerId": "ARS02",
      "name": "Santi Cazorla",
      "position": "Midfielder"
    }
  ]
}

What I could like to be able to do is the following as I am not interested in the collection names:

public class Player
{
    public string playerId { get; set; }
    public string name { get; set; }
    public string position { get; set; }
}

List<Player> cards = JsonConvert.DeserializeObject<List<Player>>(jsonContent);      

This does not work and produces an error.

Cannot deserialize the current JSON object (e.g. {\"name\":\"value\"}) into type 'System.Collections.Generic.List`1[Player]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly. To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.

Is there any way to accomplish this using Newtonsoft.Json?

3 Answers
Related