动态对象处理问题Facebook C#sdk

时间:2011-09-09 21:13:41

标签: c# facebook-c#-sdk

我正在使用Facebook C#sdk用于桌面应用。我正在获取动态对象,然后提取名称,id等

dynamic result = fb.Get("/me");
string name=result.name;

现在问题是我无法提取工作信息或喜欢的团队等。我已经使用了所需的权限,但无法处理动态对象。它采用以下格式:

"languages": [
{
  "id": "106502622718539", 
  "name": "Bānglā"
}, 
{
  "id": "106059522759137", 
  "name": "English"
}

],

http://developers.facebook.com/tools/explorer/

经过多次尝试和搜索才得到它们。一无所获。我读过它以数组的形式出现。请帮助通过C#代码提取这些信息..........

2 个答案:

答案 0 :(得分:2)

看起来你可能想要:

dynamic result = fb.Get("/me");
foreach (dynamic language in result.languages)
{
    Console.WriteLine("{0}: {1}", language.name, language.id);
}

不能说我自己使用过Facebook SDK。

答案 1 :(得分:1)

以下是关于如何在Facebook C#SDK / SimleJson中使用json数据的黄金法则(内部Facebook C#SDK使用SimpleJson进行json序列化/反序列化http://simplejson.codeplex.com/)。

有三种可能的类型:Array,Json Object和privimitive类型。

  • 数组:可以投放到IList< Object>或IList< dynamic>
  • JsonObject :键值对 - IDictionary< string,object>
  • 原始类型:bool,string,long和double。

由于langauges是一个数组,你可以将它用作IList< object>并在Json Skeet提到的for循环中使用它。您还可以获得其他IList< T>的好处。索引器和数组的不同属性等功能。

dynamic result = fb.Get("/me");
var langauges = result.languages;
var length = languages.Length;
var lang1 = languages[0];
var lang1Id = lang1["id"];
var lang1Name = lang1["name"];
var lang2 = langauges[1];
var lang2Id = lang2.id;
var lang2Name = lang2.name;

因为lang1和lang2是一个JsonObject,你可以使用像lang1 [“id”]这样的索引器,就像你在IDictionary< string,object>中一样。或者更容易使用lang1.id。