2013-12-25 4 views
2

Я получаю это исключение. Я не понимаю, что мне делать. Я много гугл, но ничего не нашел.Не удается десериализовать текущий объект JSON

Не может десериализации текущего объекта JSON (например, { "имя": "значение"}) в тип 'System.Collections.ObjectModel.ObservableCollection`1 [LU.FacebookStalker.StoreApp.ViewModel.PageLike] , так как тип требует массива JSON (например, [1,2,3]) для десериализации правильно.

Чтобы исправить эту ошибку, либо изменить JSON в массив JSON (например [1,2,3]) или изменить десериализованное типа, так что это нормально .NET типа (например, не примитивный тип, как целое , а не тип коллекции как массив или список), которые можно десериализовать из объекта JSON. JsonObjectAttribute также можно добавить к типу, чтобы заставить его десериализовать объект JSON.

Это мой класс:

 public class PageLike 
     { 
      public string Id { get; set; } 
      public string Name { get; set; } 
      public string count { get; set; } 
      public string photoUrl { get; set; } 
     } 

     public class Hangout 
     { 
      public string Id { get; set; } 
      public string Name { get; set; } 
      public string photoUrl { get; set; } 
      public int count { get; set; } 
     } 

     public class Interaction 
     { 
      public string Id { get; set; } 
      public string Name { get; set; } 
      public string photoUrl { get; set; } 
      public int count { get; set; } 
     } 

     public class Place 
     { 
      public object Id { get; set; } 
      public string Name { get; set; } 
      public string photoUrl { get; set; } 
      public int count { get; set; } 
     } 

     public class HomeSummaryResult 
     { 
      public List<Hangout> hangouts { get; set; } 
      public List<Interaction> interactions { get; set; } 
      public List<PageLike> likes { get; set; } 
      public List<Place> places { get; set; } 
     } 

     public class RootObject 
     { 
      public HomeSummaryResult HomeSummaryResult { get; set; }     
     } 

Я зову службы, как это:

HttpClient client = new HttpClient(); 
string url = string.Format("");    
HttpResponseMessage response = await client.GetAsync(url); 
dynamic likesResult= await response.Content.ReadAsStringAsync();   
var x = (JsonConvert.DeserializeObject<IDictionary<string, object>>(likesResult.ToString()))["HomeSummaryResult"]; 
likesList = JsonConvert.DeserializeObject<ObservableCollection<PageLike>>(x.ToString()); 

И мой JSON является:

{ 
    "HomeSummaryResult": { 
    "hangouts": [ 
     { 
     "Id": "112", 
     "Name": "Mohsin", 
     "photoUrl": "graph.facebook.com\/112\/picture", 
     "count": 12 
     }, 
     { 
     "Id": "103", 
     "Name": "Khan", 
     "photoUrl": "graph.facebook.com\/103\/picture", 
     "count": 11 
     } 
    ], 
    "interactions": [ 
     { 
     "Id": "724", 
     "Name": "Jawad Shareef", 
     "photoUrl": "graph.facebook.com\/724\/picture", 
     "count": 482 
     }, 
     { 
     "Id": "583", 
     "Name": "Ahsan Aziz Abbasi", 
     "photoUrl": "graph.facebook.com\/583\/picture", 
     "count": 228 
     } 
    ], 
    "likes": [ 
     { 
     "Id": "122", 
     "Name": "Community", 
     "photoUrl": "graph.facebook.com\/122\/picture", 
     "count": 324 
     }, 
     { 
     "Id": "110", 
     "Name": "Musician\/band", 
     "photoUrl": "graph.facebook.com\/110\/picture", 
     "count": 119 
     } 
    ], 
    "places": [ 
     { 
     "Id": null, 
     "Name": "Local business", 
     "photoUrl": "graph.facebook.com\/\/picture", 
     "count": 69 
     }, 
     { 
     "Id": null, 
     "Name": "City", 
     "photoUrl": "graph.facebook.com\/\/picture", 
     "count": 43 
     } 
    ] 
    } 
} 
+0

Вы назначаете какой-либо «ObservableCollection» в любом из параметров и выполняете сериализацию объекта «HomeSummaryResult» или какого-либо другого класса. – dbw

+5

Пожалуйста, покажите код, вызывающий код десериализации, а также соответствующий JSON. –

+0

, пожалуйста, предоставьте код, в котором вы конвертируете/передаете данные json. –

ответ

0

Так вот ответ. Я решил, что решил.

Я просто добавил ["likes"]

Кодекс:

var x = (JsonConvert.DeserializeObject<IDictionary<string, object>>(likesResult.ToString()))["HomeSummaryResult"]["likes"]; 

, потому что был в JSON массива.

Смежные вопросы