2016-02-16 5 views
1

Это дает мне ошибку при десериализации JSON этот файлJSON Ошибка преобразования значения в тип

{ 
    "checkOut": "10:30", 
    "stars": 4, 
    "locationId": 953, 
    "propertyType": 6, 
    "checkIn": "15:00", 
    "trustyou": { 
    "languageSplit": [ 
     { 
     "tripTypeSplit": [ 
      { 
      "type": "family", 
      "percentage": 85 
      }, 
      { 
      "type": "couple", 
      "percentage": 15 
      } 
     ], 
     "name": "de", 
     "percentage": 100 
     } 
    ], 
    "location": [ 

    ], 
    "reviewsCount": 83, 
    "popularity": 0, 
    "tripTypeSplit": [ 
     { 
     "type": "family", 
     "percentage": 86 
     }, 
     { 
     "type": "couple", 
     "percentage": 14 
     } 
    ], 
    "sentimentScoreList": [ 
     { 
     "categoryId": "14", 
     "ratio": "Good", 
     "shortText": "Great location", 
     "name": "Location", 
     "subcategories": [ 

     ], 
     "highlights": [ 
      { 
      "text": "Beautiful location", 
      "confidence": 100 
      } 
     ], 
     "reviewCount": 14, 
     "score": 100 
     }, 
     { 
     "categoryId": "111", 
     "ratio": "Good", 
     "shortText": "Rather comfortable", 
     "name": "Comfort", 
     "subcategories": [ 
     ], 
     "highlights": [ 

     ], 
     "reviewCount": 5, 
     "score": 100 
     }, 

У меня есть следующие классы для этого JSON

public class Root 
    { 

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

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

     [JsonProperty("hidden")] 
     public bool Hidden { get; set; } 

     [JsonProperty("trustyou")] 
     public Trustyou Trustyou { get; set; } 

     [JsonProperty("amenitiesV2")] 
     public AmenitiesV2 AmenitiesV2 { get; set; } 

     [JsonProperty("hasAirbnb")] 
     public bool HasAirbnb { get; set; } 

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

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

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

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

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

Что, кажется, проблема? Я десериализации это с помощью

string resp2 = await client.GetStringAsync(""); 
    var hotelDetails = JsonConvert.DeserializeObject<IDictionary<string, HotelsDescriptionAPI.Root>>(resp2, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }); 
    foreach (var hoteldesc in hotelDetails) 
    { 
     MessageBox.Show(hoteldesc.Value.Id); 
    }  

и точная ошибка

"Error converting value 24545 to type and Error converting value "10:30" to type 'HotelsDescriptionAPI.Root'. Path 'checkOut', line 1, position 19." 

Im пытается получить значение «Id», что может быть проблема с моим кодом?

ответ

2

Ваш код десериализации должен быть:

var hotelDetails = JsonConvert.DeserializeObject<HotelsDescriptionAPI.Root>(resp2, 
        new JsonSerializerSettings { 
         NullValueHandling = NullValueHandling.Ignore 
        }); 

Вы пытаетесь десериализации его в словарь string,Root, когда сам объект просто Root.

+0

Я попытался сделать im im «Невозможно десериализовать текущий массив JSON (например, [1,2,3]) в тип« HotelsDescriptionAPI.AmenitiesV2 », потому что для этого типа требуется объект JSON (например, {" name ":" value " }) для десериализации правильно. " – Nevi

+0

Я включил класс AmenitiesV2 в свой код – Nevi

+1

@Nevi Хорошо, да, посмотрите на JSON: «Удобства V2»: [], '. Это массив, а не объект. Вероятно, ваш код должен быть «IList » вместо «AmenitiesV2», но это сложно сказать, потому что массив пуст в JSON. – Rob

-1

Для людей, которым это не помогает, и которые не используют Entity Framework и не создают классы домена вручную - убедитесь, что все ваши свойства класса соответствуют тому, что выходит из вашего источника данных в том же точном порядке.