Десериализация списка объектов, которые содержат словарь
Я видел много примеров, которые, кажется, показывают, что то, что я делаю, должно работать, но по какой-то причине это не так. Я пытаюсь десериализовать коллекцию объектов, одним из свойств которой является словарь, например:
class Program
{
static void Main(string[] args)
{
var json = "{\"Collection\":[{\"ID\":\"1243\",\"Dictionary\":[{\"Key\":\"color\", \"Value\":\"red\"},{\"Key\":\"size\",\"Value\":\"large\"}]},{\"ID\":\"1243\",\"Dictionary\":[{\"Key\":\"color\", \"Value\":\"blue\"},{\"Key\":\"size\",\"Value\":\"small\"}]}]}";
//var json = "[{\"ID\":\"1243\",\"Dictionary\":[{\"Key\":\"color\", \"Value\":\"red\"},{\"Key\":\"size\",\"Value\":\"large\"}]},{\"ID\":\"1243\",\"Dictionary\":[{\"Key\":\"color\", \"Value\":\"blue\"},{\"Key\":\"size\",\"Value\":\"small\"}]}]";
List<MyObject> myObjects = new JavaScriptSerializer().Deserialize<List<MyObject>>(json);
}
}
[DataContract]
public class MyObject
{
[DataMember]
public string ID { get; set; }
[DataMember]
public Dictionary<string, string> Dictionary { get; set; }
}
Первая строка json инкапсулирует все в объекте - если я запускаю тот, он работает нормально, но myObjects - просто пустой список. Если я запускаю вторую строку (без переноса), я получаю следующую ошибку:
Type 'System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]' is not supported for deserialization of an array.
Из проведенного мною исследования кажется, что все должно быть довольно просто - у кого-нибудь есть идеи относительно того, какой формат JSON мне следует использовать и что идет не так? JSON отлично десериализуется, если я просто делаю один объект вместо массива объектов.