1

私は何時間も JsonArray を解析しようとしています。graph.facebook で取得したので、値を追加できます。抽出したい値は、メッセージと ID です。

JasonArry を取得することは問題なく、正常に動作します。

[
    {
    "code":200,
    "headers":[{"name":"Access-Control-Allow-Origin","value":"*"}],
    "body":"{
        \"id\":\"255572697884115_1\",
        \"from\":{
            \"name\":\"xyzk\",
            \"id\":\"59788447049\"},
        \"message\":\"This is the first message\",
        \"created_time\":\"2011-11-04T21:32:50+0000\"}"},
    {
    "code":200,
    "headers":[{"name":"Access-Control-Allow-Origin","value":"*"}],
    "body":"{
        \"id\":\"255572697884115_2\",
        \"from\":{
             \"name\":\"xyzk\",
             \"id\":\"59788447049\"},
        \"message\":\"This is the second message\",
        \"created_time\":\"2012-01-03T21:05:59+0000\"}"}
]

今、メッセージにアクセスするためにいくつかの方法を試しましたが、すべての方法がキャッチで終わり、例外がスローされます。

例えば:

var serializer = new JavaScriptSerializer();   
var result = serializer.Deserialize<dynamic>(json);

foreach (var item in result)
{
    Console.WriteLine(item.body.message);
}

例外をスローします: System.Collections.Generic.Dictionary には本体の定義が含まれていません。それにもかかわらず、下のスクリーンショットでわかるように、その本体には定義が含まれています。

写真を投稿することは許可されていないため、直接アップロードで見つけることができます: http://s7.directupload.net/images/120907/zh5xyy2k.png

私はこれ以上のアイデアを持っていないので、私を助けてください。これは、商用ではなくプライベートなプロジェクトに必要です。

コードのフレーズを教えていただければ、開発を続けることができます。

今までありがとう

ドミニク

4

3 に答える 3

5

Json.Netを使用する場合、あなたがしなければならないのは

交換

var serializer = new JavaScriptSerializer();
var result = serializer.Deserialize<dynamic>(json);

dynamic result = JsonConvert.DeserializeObject(json);

それで全部です。

于 2012-09-07T09:48:44.097 に答える
3

強く型付けされたオブジェクトに逆シリアル化していないため、アプリケーションが例外をスローするのは正常です。つまり、デシリアライザーはAnynymousクラスを作成しません。

文字列は実際には2つのオブジェクトに逆シリアル化され、それぞれにDictionary<string,object>要素が含まれています。だからあなたがする必要があるのはこれです:

var serializer = new JavaScriptSerializer();   
var result = serializer.Deserialize<dynamic>(s);

foreach(var item in result)
{
    Console.WriteLine(item["body"]["message"]);
}

完全なサンプルコードは次のとおりです。

void Main()
{
        string json =  @"[
    {
    ""code"":200,
    ""headers"":[{""name"":""Access-Control-Allow-Origin"",""value"":""*""}],
    ""body"":{
        ""id"":""255572697884115_1"",
        ""from"":{
            ""name"":""xyzk"",
            ""id"":""59788447049""},
        ""message"":""This is the first message"",
        ""created_time"":""2011-11-04T21:32:50+0000""}},
    {
    ""code"":200,
    ""headers"":[{""name"":""Access-Control-Allow-Origin"",""value"":""*""}],
    ""body"":{
        ""id"":""255572697884115_2"",
        ""from"":{
             ""name"":""xyzk"",
             ""id"":""59788447049""},
        ""message"":""This is the second message"",
        ""created_time"":""2012-01-03T21:05:59+0000""}}
]";
    var serializer = new JavaScriptSerializer();   
    var result = serializer.Deserialize<dynamic>(json);

    foreach(var item in result)
    {
        Console.WriteLine(item["body"]["message"]);
    }

}

プリント:

This is the first message
This is the second message
于 2012-09-06T22:50:53.983 に答える