2

FacebookSDKからオブジェクトを取得しました

var responsePages = (JsonObject)FBClient_.Get(new { ids = 
[123123123, 123123123, 12312213, etc]});

このクエリはデータを返します(画像を参照)

結果

これをオブジェクトのリストに変換するにはどうすればよいですか?フォローしてみましたがうまくいきません

var pe = (from dynamic page
                in (IList<object>)(object)responsePages.Values
                             orderby page.name ascending
                             select new FBPage
                             {
                                 Id = Convert.ToString(page.id),
                             }
                ).ToList();

それが失敗したので、このダイナミックなものが私を真剣に怒らせるので、助けていただければ幸いです。

ありがとう

4

2 に答える 2

3

ダイナミックを使用している場合は、キャストする必要はありません。

var fb = new FacebookClient();

dynamic result = fb.Get(new { ids = new[] { "...", "..." } });

var pages = new List<FBPage>();
foreach (var page in result.Values)
{
    var fbPage = new FBPage {
        Id = page.id,
        Name = page.name
    };

    pages.Add(fbPage);
}

または、linqを使用する場合。(拡張メソッドは動的ではサポートされていないため、キャストを行う必要がありますJsonObject => IDictionary<string, dyanmic>、、JsonArray => IList<dynamic>

var pages = ((IDictionary<string, dynamic>)result)
    .Select(kpv => kpv.Value)
    .Select(p => new FBPage { id = p.id, name = p.name })
    .ToList();

または、クラスを強く型付けしました。

var fbPages = fb.Get<IDictionary<string, FBPage>>(new { 
    ids = new[] { "...", "..." } 
}).Values;

public class FBPage
{
    public string id { get; set; }
    public string name { get; set; }
}
于 2012-12-02T02:39:10.113 に答える
0

'responsePages.Values'はICollection<JsonValue>

JsonValuesはJson文字列にシリアル化できます。これにより、Json.Netなどの優れたJsonデシリアライザーの遊びになります。

単純なループを使用すると、これは次のようになります。

List<dynamic> dynamicList = new List<dynamic>();
List<FBPage> pe = new List<FBPage>();

foreach(var page in responsePages.Values)
{
   //ToString is overridden in JsonValue to provide a string in Json format
   string pageAsJsonString = page.ToString();

   //Deserialize (parse) to a dynamic object using Json.Net's JObject.Parse static method
   dynamic parsedPage = JObject.Parse(pageAsJsonString);
   dynamicList.Add(parsedPage);

   //Alternatively, if you have an appropriate object handy, deserialize directly:
   FBPage deserializedPage = JsonConvert.DeserializeObject<FBPage>(pageAsJsonString);
   pe.Add(deserializedPage);
}

foreach(dynamic page in dynamicList)
{
   Console.WriteLine(page.name);
}

foreach(FBPage page in pe)
{
   Console.WriteLine(page.Id);
}
于 2012-12-01T13:20:08.090 に答える