3

Json.NET を使用して Json 文字列を逆シリアル化しようとしています。私はそれについて基本的な理解を持っていますが、何日も試してみましたが、うまくいきません。これが私のコードです。(不要な/余分なコードは無視してください。調査後に見つけたものに基づいて複数のソリューションを試していたことを念頭に置いてください)。

public class Location
{
    private string ab_;
    private int c_;
    public string name { get { return ab_; } set { value = ab_; } }
    public int woeid { get { return c_; } set { value = c_; } }
}

public class Trend
{
    private string x_, y_, z_;
    private object a_, b_;
    public string query { get { return x_; } set { value = x_; } }
    public string name { get { return y_; } set { value = y_; } }
    public object promoted_content { get { return a_; } set { value = a_; } }
    public string url { get { return z_; } set { value = z_; } }
    public object events { get { return b_; } set { value = b_; } }

}

public class RootObject
{
    private string o, l;
    private List<Location> list1;
    private List<Trend> list2;
    public List<Location> locations { get { return list1; } set { value = list1; } }
    public string created_at { get { return o; } set { value = o; } }
    public List<Trend> trends { get { return list2; } set { value = list2; } }
    public string as_of { get { return l; } set { value = l; } }
}
RootObject values = JsonConvert.DeserializeObject<RootObject>(jsonString)

今、逆シリアル化しようとしている Json 文字列は次のとおりです。

 [
   {
      "as_of":"2012-08-31T15:31:55Z",
      "trends":[
         {
            "query":"%23GDTHATXX",
            "name":"#GDTHATXX",
            "promoted_content":null,
            "url":"http:\/\/twitter.com\/search\/?q=%23GDTHATXX",
            "events":null
         },
         {
            "query":"%23UnMundoEnElQue",
            "name":"#UnMundoEnElQue",
            "promoted_content":null,
            "url":"http:\/\/twitter.com\/search\/?q=%23UnMundoEnElQue",
            "events":null
         },
         {
            "query":"%23%C3%A7ekicibuluyorum",
            "name":"#\u00e7ekicibuluyorum",
            "promoted_content":null,
            "url":"http:\/\/twitter.com\/search\/?q=%23%C3%A7ekicibuluyorum",
            "events":null
         },
         {
            "query":"%22Darren%20Kenny%22",
            "name":"Darren Kenny",
            "promoted_content":null,
            "url":"http:\/\/twitter.com\/search\/?q=%22Darren%20Kenny%22",
            "events":null
         },
         {
            "query":"%22Richard%20Wright%22",
            "name":"Richard Wright",
            "promoted_content":null,
            "url":"http:\/\/twitter.com\/search\/?q=%22Richard%20Wright%22",
            "events":null
         },
         {
            "query":"Yossi",
            "name":"Yossi",
            "promoted_content":null,
            "url":"http:\/\/twitter.com\/search\/?q=Yossi",
            "events":null
         },
         {
            "query":"Filipinas",
            "name":"Filipinas",
            "promoted_content":null,
            "url":"http:\/\/twitter.com\/search\/?q=Filipinas",
            "events":null
         },
         {
            "query":"%22Javi%20Garc%C3%ADa%22",
            "name":"Javi Garc\u00eda",
            "promoted_content":null,
            "url":"http:\/\/twitter.com\/search\/?q=%22Javi%20Garc%C3%ADa%22",
            "events":null
         },
         {
            "query":"%22Van%20der%20Vaart%22",
            "name":"Van der Vaart",
            "promoted_content":null,
            "url":"http:\/\/twitter.com\/search\/?q=%22Van%20der%20Vaart%22",
            "events":null
         },
         {
            "query":"SSN",
            "name":"SSN",
            "promoted_content":null,
            "url":"http:\/\/twitter.com\/search\/?q=SSN",
            "events":null
         }
      ],
      "created_at":"2012-08-31T15:30:32Z",
      "locations":[
         {
            "name":"Globales",
            "woeid":1
         }
      ]
   }
]

現在の JSON 配列 ([1,2,3] など) を型 'Twitter.TrendParser+RootObject' に逆シリアル化できません。この型では、正しく逆シリアル化するために JSON オブジェクト ({"name":"value"} など) が必要です。

このエラーを修正するには、JSON を JSON オブジェクト (例: {"name":"value"}) に変更するか、逆シリアル化された型を配列または List のようなコレクション インターフェイス (ICollection、IList など) を実装する型に変更します。 JSON 配列から逆シリアル化されます。JsonArrayAttribute を型に追加して、強制的に JSON 配列から逆シリアル化することもできます。

パス ''、行 1、位置 1。

前に言ったように、私は Json 形式の基本的な理解があり、さまざまなタイプのクラスを使用して同じ結果で逆シリアル化しようとしましたが、問題が何であるかについてのヒントやアイデアはありますか?. また、json.NET 以外のサードパーティ ライブラリではなく、.NET 2.0 にこだわっています。

ご清聴ありがとうございました。

  • 編集 *

どうやらリスト値を宣言しようとしても、実際のコンテキストでは変数「値」が作成されないため、それを修正する方法はありません。

4

2 に答える 2

0

JSON は、1 つのオブジェクトを含む配列です。

これは、JSON.NET が単一のオブジェクトを想定しているが、リストを取得していることを意味します。エラーメッセージは基本的にそれを伝えています。

これを試してください:

List<RootObject> values = JsonConvert.DeserializeObject<List<RootObject>>(receiving);
于 2012-08-31T16:01:19.433 に答える