2011-01-20 77 views
8

我必須在.net 3.5中使用facebook c#sdk創建一個新的項目,我知道最新版本有4個示例 - 但它也是針對3.5編譯的,因此完全可以工作。JsonObject到Model Facebook SDK

無論如何,請原諒我,如果我是非常愚蠢的。但我正在尋找將json對象轉換爲我的模型,我可以做這樣的事情嗎?

public ActionResult About() 
{ 
    var app = new FacebookApp(); 
    JsonObject friends = (JsonObject)app.Get("me/friends"); 
    ViewData["Albums"] = new Friends((string)friends.ToString()); 
    return View(); 
} 

public class Friends 
{ 
    public string name { get; set; } 
    public string id { get; set; } 

    public Friends(string json) 
    { 
     JArray jObject = JArray.Parse(json); 
     JToken jData = jObject["data"]; 

     name = (string)jData["name"]; 
     id = (string)jData["id"]; 
    } 
} 

這是使用Json.Net。顯然這是行不通的,我得到的錯誤是

從JsonReader讀取JArray時出錯。當前的JsonReader項目不是數組:StartObject

我很確定我完全錯誤的解決方法 - 所以如果任何人都可以提供任何提示,我會感到難以置信的。

回答

14

也許這個代碼將有助於:

public class Friend 
{ 
    public string Id { get; set; } 
    public string Name { get; set; } 
} 

... 

public ActionResult About() 
{ 
    var app = new FacebookApp(); 
    var result = (JsonObject)app.Get("me/friends")); 
    var model = new List<Friend>(); 

    foreach(var friend in (JsonArray)result["data"]) 
     model.Add(new Friend() 
     { 
      Id = (string)(((JsonObject)friend)["id"]), 
      Name = (string)(((JsonObject)friend)["name"]) 
     }; 

    return View(model); 
} 

現在你的模式將是類型List<Friend>

0

您也可以直接從接收到的數據(JSON)使用Json.NET對象的列表繪製的。類似這樣的:

var fbData = app.Get("me/friends")); 
var friendsList = JsonConvert.DeserializeObject<List<Friend>>(fbData.ToString()); 

它很短並自動創建並填充列表。

注意:映射以不區分大小寫的方式完成(class屬性可以具有與JSON屬性不同的大小寫)。