2015-01-18 25 views
13

Próbuję odserializować obiekt do listy obiektów przy użyciu biblioteki JSON.NET. Mój plik json to:JSON.NET DeserializeObject do listy obiektów

[ 
{ 
    "id": 1, 
    "name": "Poczta", 
    "description": "Opis", 
    "latitude": 52.25197, 
    "longitude": 20.896355, 
    "accuracy": 0, 
    "type": "", 
    "image": null 
}, 
{ 
    "id": 2, 
    "name": "WAT", 
    "description": "Budynek główny - sztab.\r\nzażółć gęślą jaźń", 
    "latitude": 52.2531213, 
    "longitude": 20.8995849, 
    "accuracy": 0, 
    "type": "Uczelnia", 
    "image": null 
}, 
{ 
    "id": 3, 
    "name": "Przychodnia", 
    "description": "Opis", 
    "latitude": 52.250808, 
    "longitude": 20.895348, 
    "accuracy": 0, 
    "type": "", 
    "image": null 
}, 
{ 
    "id": 4, 
    "name": "DS3", 
    "description": "Opis", 
    "latitude": 52.250063, 
    "longitude": 20.895847, 
    "accuracy": 0, 
    "type": "", 
    "image": null 
}, 
{ 
    "id": 5, 
    "name": "DS2", 
    "description": "Opis", 
    "latitude": 52.2497674, 
    "longitude": 20.8966583, 
    "accuracy": 0, 
    "type": "", 
    "image": null 
}, 
{ 
    "id": 6, 
    "name": "DS1", 
    "description": "Opis", 
    "latitude": 52.25088, 
    "longitude": 20.897492, 
    "accuracy": 0, 
    "type": "", 
    "image": null 
}, 
{ 
    "id": 7, 
    "name": "DS4", 
    "description": "To jest opis", 
    "latitude": 52.2539982, 
    "longitude": 20.8971716, 
    "accuracy": 0, 
    "type": "", 
    "image": null 
}, 
{ 
    "id": 15, 
    "name": "a", 
    "description": "b", 
    "latitude": 52.250105, 
    "longitude": 20.896124, 
    "accuracy": 0, 
    "type": "Uczelnia", 
    "image": null 
} 
] 

Napisałem trochę kodu, aby to zrobić, ale to nie działa. Próbowałem wielu opcji, takich jak dynamiczna deserializacja, a teraz próbuję utworzyć listę.

async private void webServiceGetPoints() 
    { 
     try 
     { 
      var client = new HttpClient(); 
      var response = await client.GetAsync(new Uri("\\private\\")); 
      var result = await response.Content.ReadAsStringAsync(); 


      List<WebServiceTag> convert = JsonConvert.DeserializeObject<List<WebServiceTag>>(result) as List<WebServiceTag>; 

      Debug.WriteLine(convert.Count); 
     } 
     catch (JsonSerializationException jsonerr) 
     { 
      Debug.WriteLine(jsonerr.ToString()); 
     } 
     catch (Exception e) 
     { 
      Debug.WriteLine(e.ToString()); 
     } 
    } 

Ten kod na podstawie własnej klasie jest:

class WebServiceTag 
{ 

    [JsonProperty("id")] 
    public int id { get; set; } 

    [JsonProperty("name")] 
    public string name { get; set; } 

    [JsonProperty("description")] 
    public string description { get; set; } 

    [JsonProperty("latitude")] 
    public double latitude { get; set; } 

    [JsonProperty("longitude")] 
    public double longitude { get; set; } 

    [JsonProperty("accuracy")] 
    public int accuracy { get; set; } 

    [JsonProperty("type")] 
    public string type { get; set; } 

    [JsonProperty("image")] 
    public string image { get; set; }   
} 

To mój drugi dzień z tym problemem, więc proszę mi pomóc :) To powinno być tak proste.

+1

Co nie działa? Czy masz konkretny komunikat o błędzie? – khlr

+0

nie można repro - to działa dobrze dla mnie – Plutonix

Odpowiedz

25

Okazało się, że próbuje użyć:

JsonConvert.DeserializeObject<List<T>>() 

nie będzie działać dla mnie. Stwierdziłem, że to zadziałało zamiast tego.

JsonConvert.DeserializeObject<IEnumerable<T>>() 

Mam nadzieję, że lepiej późno niż nigdy nie odpowiedzieć.

+1

Chciałbym móc to zrobić więcej niż raz. Byłem Googling przez co najmniej godzinę na rozwiązanie mojego problemu i to działało ładnie. Dziękuję Ci! – TheAmazingJason

+1

Dzięki za to. Typo na IEnumerable, ale to i .ToList() na końcu dostałem to w formacie, którego potrzebowałem. – mjhamre