1

Facebook APIへの呼び出しからの応答を逆シリアル化する方法を見つけようとして、私は多くの問題を抱えています。私のC#コードは次のようになります:

FacebookClient client = new FacebookClient();
string path = "SELECT message, type, attachment FROM stream WHERE source_id = " + fbid.ToString();
dynamic result = client.Get("fql",     new { q = path });

これは結果がどのように見えるかです-それはjsonとして返されます

この Dynamic object を逆シリアル化する必要があります。これは文字列 json であり、ac# オブジェクトです。foreach動的オブジェクトでループを実行できることを知りません。また、オブジェクトを作成し、作成したオブジェクトに逆シリアル化しようとしました。問題は、ご覧のとおり、ほとんどの場合返されない多くのプロパティがあり、場合によっては返されることです。したがって、Facebook が返す json には常に異なる量のプロパティがあります。forループを実行してから、 response.data.message[1] のような方法で json からオブジェクトを取得しようとしましたが、うまくいきません。この動的オブジェクトを使用できるものに逆シリアル化する方法はありますか?

{"data":
 [
    {
        "message": "",
        "type": null,
        "attachment": {
            "description": ""
        }
    },
    {
        "message": "",
        "type": 80,
        "attachment": {
            "media": [
                {
                    "href": "https://www.facebook.com/pages/Team-Vintage/119337701414139",
                    "alt": "",
                    "type": "link",
                    "src": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn1/71056_119337701414139_6207793_n.jpg"
                }
            ],
            "name": "Team Vintage",
            "href": "https://www.facebook.com/pages/Team-Vintage/119337701414139",
            "caption": "",
            "description": "Team Vintage is designed to handle all your event planning needs.  We cater to individuals as well as groups and businesses focused on sporting events, concerts, tailgates, golf outings, as well as transportation via limos and party/coach buses.",
            "properties": [
                {
                    "name": "Page",
                    "text": "245 like this"
                }
            ],
            "icon": "https://fbstatic-a.akamaihd.net/rsrc.php/v2/yf/r/0HZPW6-lhQu.png"
        }
    },
    {
        "message": "",
        "type": 237,
        "attachment": {
            "media": [
                {
                    "href": "",
                    "alt": "",
                    "type": "swf",
                    "src": "https://fbexternal-a.akamaihd.net/app_full_proxy.php?app=263101677125815&v=1&size=p&cksum=7d97808202a372d6392257f52d91e5d2&src=http%3A%2F%2Fi1.sndcdn.com%2Fartworks-000027234998-gkd71f-t500x500.jpg%3Fcc07a88",
                    "swf": {
                        "source_url": "http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F50851560&color=3b5998&auto_play=true&show_artwork=false&origin=facebook",
                        "preview_img": "https://fbexternal-a.akamaihd.net/app_full_proxy.php?app=263101677125815&v=1&size=p&cksum=7d97808202a372d6392257f52d91e5d2&src=http%3A%2F%2Fi1.sndcdn.com%2Fartworks-000027234998-gkd71f-t500x500.jpg%3Fcc07a88",
                        "width": 460,
                        "height": 98,
                        "expanded_width": 0,
                        "expanded_height": 0
                    }
                }
            ],
            "name": "Camp Bisco",
            "href": "http://soundcloud.com/amon-tobin/bed-time-stories-extended-live",
            "caption": "",
            "description": "Check out this extended track from Amon Tobin!",
            "properties": [],
            "icon": "https://www.facebook.com/images/icons/default_app_icon.gif"
        }
    },
    {
        "message": "",
        "type": null,
        "attachment": {
            "description": ""
        }
    },
    {
        "message": "",
        "type": 237,
        "attachment": {
            "media": [
                {
                    "href": "https://dev.fanfueledengage.com/share/auitbc",
                    "alt": "",
                    "type": "link",
                    "src": "https://fbexternal-a.akamaihd.net/app_full_proxy.php?app=263101677125815&v=1&size=z&cksum=124f2c1fb6ea2fcaa8d98ebe0fd2246d&src=http%3A%2F%2Fimages.proboardshop.com%2Fbigagnes-elkpark20-long-right-sleepingbag-coalrust-13-thumb.jpg"
                }
            ],
            "name": "Proboardshop",
            "href": "https://dev.fanfueledengage.com/share/auitbc",
            "caption": "dev.fanfueledengage.com",
            "description": "I just bought  Big Agnes Elk Park 20 Long Right Sleeping Bag Coal/Rust  on FanFueled. I'm earning Camp Bisco points. Check it out. If you decide to make a purchase through my link, FanFueled will pay me a commission for it, cool huh?",
            "properties": [],
            "icon": "https://www.facebook.com/images/icons/default_app_icon.gif"
        }
    },
    {
        "message": "",
        "type": 8,
        "attachment": {
            "description": ""
        }
    },
    {
        "message": "",
        "type": 80,
        "attachment": {
            "media": [
                {
                    "href": "https://www.facebook.com/pages/Magnolia-Roller-Vixens/29048470621",
                    "alt": "",
                    "type": "link",
                    "src": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-ash4/276513_29048470621_1691556_n.jpg"
                }
            ],
            "name": "Magnolia Roller Vixens",
            "href": "https://www.facebook.com/pages/Magnolia-Roller-Vixens/29048470621",
            "caption": "",
            "description": "Magnolia Roller Vixens is a community-wise sports initiative for adult females. Our purpose is for fun, friendly sports competition among like-minded women.  Magnolia Roller Vixens promotes and fosters the sport of women's flat track derby by facilitating the development of athletic ability, sportsw...",
            "properties": [
                {
                    "name": "Page",
                    "text": "2,717 like this"
                }
            ],
            "icon": "https://fbstatic-a.akamaihd.net/rsrc.php/v2/yf/r/0HZPW6-lhQu.png"
        }
    }
 ]
}
4

2 に答える 2

3

サンプルjsonを使用すると、次のコードが機能します。

dynamic response = JsonConvert.DeserializeObject(json);

Console.WriteLine("PropName:" + response.data[1].attachment.properties[0].name);

foreach (var data in response.data)
{
    if (data.attachment != null)
        Console.WriteLine((string)data.attachment.name);
}

PS:Json.Netを使用しました


string json = @"{""data"":
 [
    {
        ""message"": """",
        ""type"": null,
        ""attachment"": {
            ""description"": """"
        }
    },
    {
        ""message"": """",
        ""type"": 80,
        ""attachment"": {
            ""media"": [
                {
                    ""href"": ""https://www.facebook.com/pages/Team-Vintage/119337701414139"",
                    ""alt"": """",
                    ""type"": ""link"",
                    ""src"": ""https://fbcdn-profile-a.akamaihd.net/hprofile-ak-prn1/71056_119337701414139_6207793_n.jpg""
                }
            ],
            ""name"": ""Team Vintage"",
            ""href"": ""https://www.facebook.com/pages/Team-Vintage/119337701414139"",
            ""caption"": """",
            ""description"": ""Team Vintage is designed to handle all your event planning needs.  We cater to individuals as well as groups and businesses focused on sporting events, concerts, tailgates, golf outings, as well as transportation via limos and party/coach buses."",
            ""properties"": [
                {
                    ""name"": ""Page"",
                    ""text"": ""245 like this""
                }
            ],
            ""icon"": ""https://fbstatic-a.akamaihd.net/rsrc.php/v2/yf/r/0HZPW6-lhQu.png""
        }
    },
    {
        ""message"": """",
        ""type"": 237,
        ""attachment"": {
            ""media"": [
                {
                    ""href"": """",
                    ""alt"": """",
                    ""type"": ""swf"",
                    ""src"": ""https://fbexternal-a.akamaihd.net/app_full_proxy.php?app=263101677125815&v=1&size=p&cksum=7d97808202a372d6392257f52d91e5d2&src=http%3A%2F%2Fi1.sndcdn.com%2Fartworks-000027234998-gkd71f-t500x500.jpg%3Fcc07a88"",
                    ""swf"": {
                        ""source_url"": ""http://player.soundcloud.com/player.swf?url=http%3A%2F%2Fapi.soundcloud.com%2Ftracks%2F50851560&color=3b5998&auto_play=true&show_artwork=false&origin=facebook"",
                        ""preview_img"": ""https://fbexternal-a.akamaihd.net/app_full_proxy.php?app=263101677125815&v=1&size=p&cksum=7d97808202a372d6392257f52d91e5d2&src=http%3A%2F%2Fi1.sndcdn.com%2Fartworks-000027234998-gkd71f-t500x500.jpg%3Fcc07a88"",
                        ""width"": 460,
                        ""height"": 98,
                        ""expanded_width"": 0,
                        ""expanded_height"": 0
                    }
                }
            ],
            ""name"": ""Camp Bisco"",
            ""href"": ""http://soundcloud.com/amon-tobin/bed-time-stories-extended-live"",
            ""caption"": """",
            ""description"": ""Check out this extended track from Amon Tobin!"",
            ""properties"": [],
            ""icon"": ""https://www.facebook.com/images/icons/default_app_icon.gif""
        }
    },
    {
        ""message"": """",
        ""type"": null,
        ""attachment"": {
            ""description"": """"
        }
    },
    {
        ""message"": """",
        ""type"": 237,
        ""attachment"": {
            ""media"": [
                {
                    ""href"": ""https://dev.fanfueledengage.com/share/auitbc"",
                    ""alt"": """",
                    ""type"": ""link"",
                    ""src"": ""https://fbexternal-a.akamaihd.net/app_full_proxy.php?app=263101677125815&v=1&size=z&cksum=124f2c1fb6ea2fcaa8d98ebe0fd2246d&src=http%3A%2F%2Fimages.proboardshop.com%2Fbigagnes-elkpark20-long-right-sleepingbag-coalrust-13-thumb.jpg""
                }
            ],
            ""name"": ""Proboardshop"",
            ""href"": ""https://dev.fanfueledengage.com/share/auitbc"",
            ""caption"": ""dev.fanfueledengage.com"",
            ""description"": ""I just bought  Big Agnes Elk Park 20 Long Right Sleeping Bag Coal/Rust  on FanFueled. I'm earning Camp Bisco points. Check it out. If you decide to make a purchase through my link, FanFueled will pay me a commission for it, cool huh?"",
            ""properties"": [],
            ""icon"": ""https://www.facebook.com/images/icons/default_app_icon.gif""
        }
    },
    {
        ""message"": """",
        ""type"": 8,
        ""attachment"": {
            ""description"": """"
        }
    },
    {
        ""message"": """",
        ""type"": 80,
        ""attachment"": {
            ""media"": [
                {
                    ""href"": ""https://www.facebook.com/pages/Magnolia-Roller-Vixens/29048470621"",
                    ""alt"": """",
                    ""type"": ""link"",
                    ""src"": ""https://fbcdn-profile-a.akamaihd.net/hprofile-ak-ash4/276513_29048470621_1691556_n.jpg""
                }
            ],
            ""name"": ""Magnolia Roller Vixens"",
            ""href"": ""https://www.facebook.com/pages/Magnolia-Roller-Vixens/29048470621"",
            ""caption"": """",
            ""description"": ""Magnolia Roller Vixens is a community-wise sports initiative for adult females. Our purpose is for fun, friendly sports competition among like-minded women.  Magnolia Roller Vixens promotes and fosters the sport of women's flat track derby by facilitating the development of athletic ability, sportsw..."",
            ""properties"": [
                {
                    ""name"": ""Page"",
                    ""text"": ""2,717 like this""
                }
            ],
            ""icon"": ""https://fbstatic-a.akamaihd.net/rsrc.php/v2/yf/r/0HZPW6-lhQu.png""
        }
    }
 ]
}";
于 2013-08-05T01:04:30.637 に答える