2014-01-26 71 views
16
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using Facebook; 
using Newtonsoft.Json; 

namespace facebook 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var client = new FacebookClient(acc_ess); 
      dynamic result = client.Get("fql", new { q = "select target_id,target_type from connection where source_id = me()"}); 
      string jsonstring = JsonConvert.SerializeObject(result); 

      //jsonstring {"data":[{"target_id":9503123,"target_type":"user"}]} 
      List<RootObject> datalist = JsonConvert.DeserializeObject<List<RootObject>>(jsonstring); 
     } 

     public class Datum 
     { 
      public Int64 target_id { get; set; } 
      public string target_type { get; set; } 
     } 

     public class RootObject 
     {   
      public List<Datum> data { get; set; } 
     } 
    } 
} 

無法反序列化當前JSON對象(例如{‘名’ :「value」}) into type 'System.Collections.Generic.List`1 [facebook.Program + RootObject]' 因爲該類型需要一個JSON數組(例如[1,2,3])來正確地反序列化 。要解決這個錯誤,可以將JSON更改爲JSON數組(例如[1,2,3]),或者更改反序列化類型,使其成爲正常的 .NET類型(例如,不是像integer這樣的基本類型,也不是集合 類型像一個數組或列表)可以是無法反序列化當前JSON對象(例如{「名稱」:「值」})成型「System.Collections.Generic.List`1

我看了其他職位。

我的JSON是這樣的:

{"data":[{"target_id":9503123,"target_type":"user"}]} 
+5

有*一個*根對象('{「data」:..}'),而不是它們的列表。 – user2864740

回答

9

隨着錯誤消息拼命的告訴你,你不能反序列化一個對象到一個集合(List<>)。

您想要反序列化爲一個RootObject

23

要清楚,除了@SLaks的回答,這意味着你需要改變這一行:

List<RootObject> datalist = JsonConvert.DeserializeObject<List<RootObject>>(jsonstring); 

是這樣的:

RootObject datalist = JsonConvert.DeserializeObject<RootObject>(jsonstring); 
2

這對我來說太,因爲我試圖獲得IEnumerable,但回覆只有一個值。請儘量確保它是您回覆中的數據列表。我使用的線(用於api url get)來解決問題如下:

HttpResponseMessage response = await client.GetAsync("api/yourUrl"); 

if (response.IsSuccessStatusCode) 
{ 
    IEnumerable<RootObject> rootObjects = 
     awaitresponse.Content.ReadAsAsync<IEnumerable<RootObject>>(); 

    foreach (var rootObject in rootObjects) 
    { 
     Console.WriteLine(
      "{0}\t${1}\t{2}", 
      rootObject.Data1, rootObject.Data2, rootObject.Data3); 
    } 

    Console.ReadLine(); 
} 

希望它有幫助。

0

真正的問題是,你在FacebookClient Get方法使用動態返回類型。儘管您使用序列化方法,但JSON轉換器無法在此之後反序列化此對象。

使用insted的的:

dynamic result = client.Get("fql", new { q = "select target_id,target_type from connection where source_id = me()"}); 
string jsonstring = JsonConvert.SerializeObject(result); 

類似的東西:

string result = client.Get("fql", new { q = "select target_id,target_type from connection where source_id = me()"}).ToString(); 

然後你可以使用DeserializeObject方法:

var datalist = JsonConvert.DeserializeObject<List<RootObject>>(result); 

希望這有助於。

相關問題