Deserializacja listy obiektów zawierających słownik
Widziałem wiele przykładów, które wskazują, że to, co robię, powinno działać, ale z jakiegoś powodu tak nie jest. Próbuję deserializować zbiór obiektów, którego jedną z właściwości jest Słownik, tak:
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; }
}
Pierwszy ciąg json hermetyzuje całość w obiekcie - jeśli go uruchomię, działa poprawnie, ale myObjects to tylko pusta lista. Jeśli uruchomię drugi ciąg znaków (bez zawijania) otrzymuję następujący błąd:
Wpisz „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]] 'nie jest obsługiwane dla deserializacji tablicy.
Z badań, które zrobiłem, wydaje się, że powinno być całkiem proste - każdy ma jakieś pomysły co do tego, który format JSON powinienem używać i co się dzieje źle? JSON jest w porządku, jeśli tylko wykonam jeden obiekt zamiast tablicy obiektów.