2013-11-21 55 views
2

錯誤:如何將JSON反序列化到此POCO類中?

無法隱式轉換類型 'UserItem' 到 'RootObject'

我如何反序列化JSON這個POCO類?

我只是想deserilize如下圖所示JSON數據轉換成C#定製POCO類和這裏是我迄今所做的;

public static UserItem DownloadJSONString(string urlJson) 
{ 
    using (WebClient wc = new WebClient()) 
    { 
     var json = wc.DownloadString(urlJson); 
     UserItem userItems = JsonConvert.DeserializeObject<RootObject>(json); 

     return userItems; 
    }    
} 

我有種陷在這裏

這裏我JSON:

{ 
    "meta": 
    { 
     "status":200, 
     "resultSet": 
     { 
      "id":"05" 
     }, 
     "pagination": 
     { 
      "count":2, 
      "pageNum":1, 
      "pageSize":2 
     } 
    }, 
    "results": 
    { 
     "id":0, 
     "name": 
     "title", 
     "items": 
     [ 
      { 
       "id":0, 
       "name":"English", 
       "title":"English", 
      }, 
      { 
       "id":0, 
       "name":"Spanish", 
       "title":"Spanish;", 
      } 
     ] 
    } 
} 

這裏是我的JSON對象(生成JSON到C#類)

public class ResultSet 
{ 
    public string id { get; set; } 
} 

public class Pagination 
{ 
    public int count { get; set; } 
    public int pageNum { get; set; } 
    public int pageSize { get; set; } 
} 

public class Meta 
{ 
    public int status { get; set; } 
    public ResultSet resultSet { get; set; } 
    public Pagination pagination { get; set; } 
} 

public class Item 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public string title { get; set; } 
} 

public class Results 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public List<Item> items { get; set; } 
} 

public class RootObject 
{ 
    public Meta meta { get; set; } 
    public Results results { get; set; } 
} 

這裏是我的簡單UserItem POCO類

public class UserItem 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public string title { get; set; } 
} 
+1

那麼,什麼是錯的?你有錯誤嗎? –

+0

錯誤:我知道我在做什麼不正確,但不知道如何到'RootObject'爲'UserItem'這是轉換C#類---錯誤=無法隱式轉換類型「UserItem」到「RootObject」 –

+0

自然。 'UserItem'與'RootObject'無關*,因此[反序列化]對象*不能被分配給這樣的變量 - 這就是編譯器類型錯誤產生的原因。考慮:'RootObject root = JsonConvert.DeserializeObject (json); UserItem userItem = DoWhateverYouNeedToGetOneOfThese(root);'在這種情況下適當創建缺少的方法應該是相當簡單的。 – user2864740

回答

5

在這裏你去:

var root = JsonConvert.DeserializeObject<RootObject>(json); 
var userItem = root.results.items 
          .Select(i => new UserItem 
          { 
           id = i.id, 
           name = i.name, 
           title = i.title 
          }).FirstOrDefault(); 

return userItem; 

正如你已經知道,你不能只是轉換Item類爲UserItem,但你可以建立一個。有一點需要注意的是,很明顯,如果你只想返回一個,你將不得不搶一個。在這裏我抓住了第一個或默認的。例如,如果列表爲空,則默認值爲null

+0

的json 5K左右回我,花了好20to30秒是正常的嗎? –

+0

@AbuHamzah,它返回5K「物品」? –

+0

是邁克爾.... –