0

JSON は次の形式です。

{ "ニュース":
   [
     { "fb": { "メッセージ": "試す", "ユーザー": "789" } },
     { "feed": { "abstract": "cool", "title": "hey" } },
     { "tw": { "tweetid": "984327", "user": "gart" } },
     { "fb": { "メッセージ": "fgt", "ユーザー": "690" } },
     { "tw": { "tweetid": "346", "user": "nfgdr" } },
     { "feed": { "abstract": "gredf", "title": "wret" } }
   ]
}

文字列に格納できるように、二重引用符を置き換えました。

今、これを使用してデシリアライズしようとしているとき:

JavaScriptSerializer jss = new JavaScriptSerializer();

jss.Deserialize<XYZType>(data);

次のエラーが発生しています。

無効なオブジェクトが渡されました。メンバー名が必要です。(1): {"news":[{"fb":{"message":"try","user":"789"}},{"feed":{"title":"hey","abstract ":"cool"}},{"tw":{"tweetid":"984327","user":"gart"}},{"fb":{"message":"fgt","user": "690"}},{"tw":{"tweetid":"346","user":"nfgdr"}},{"feed":{"title":"wret","abstract":"gredf "}}]}

どんな助けでも大歓迎です。

4

3 に答える 3

3

私はJson.Netを見て、「手動で」修正しようとするのをやめ、システム/ライブラリにそれをやってもらいます。また、 JavaScriptSerializer はちょっと不安定です...

于 2012-06-21T08:52:18.983 に答える
2

CONT : 「ニュース」配列がオブジェクト配列にシリアライズされない限り、JSON を C# オブジェクトにシリアライズしようとしているときに、配列内のオブジェクトが同種でないという事実により、問題が発生することは間違いありません。

JSON (ソース) を制御できる場合は、C# オブジェクトに簡単にシリアル化できるように構造を改善する必要があります。JSON に次の構造を持たせることができる場合:

{ "news": 
    [ 
        { 
            "fb": { "message": "try", "user": "789" },
            "feed": { "abstract_": "cool", "title": "hey" },
            "tw": { "tweetid": "984327", "user": "gart"  } 
        },
        { 
            "fb": { "message": "fgt", "user": "690" },
            "tw": { "tweetid": "346", "user": "nfgdr" },
            "feed": { "abstract_": "gredf", "title": "wret" }
        }
    ] 
}

この種の構造は、次の構造の型 XYZType によって簡単に逆シリアル化されます。

class XYZType
{
    NewsType[] news { get; set; }

    public class NewsType
    {
        FBType fb { get; set; }
        FeedType feed { get; set; }
        TweetType tw { get; set; }

        public class FBType
        {
            string message { get; set; }
            string user { get; set; }
        }

        public class FeedType
        {
            string title { get; set; }
            string abstract_ { get; set; }
        }

        public class TweetType
        {
            string tweetid { get; set; }
            string user { get; set; }
        }   
    }
}

:

1)C#では「abstract」という名前の識別子を使用できないため、意図的に「abstract」を「abstract_」に変更しました

2) 「コンテナ」クラスの埋め込みはオプションです。それらを「非埋め込み」にすることができます

于 2012-06-21T09:15:13.690 に答える
0

引用符を削除して文字列に格納することはできません。それは有効な Json ではありません。引用符を区切る必要があるので

"{\"news\":[{\"fb\":{\"message\":\"try\",\"user\":\"789\"}},etc."
于 2012-06-21T08:51:31.403 に答える