18

以下のようなJson文字列があります

 {
"JsonValues":{

        "id": "MyID",

         "values": {
            "value1":{
                "id": "100",
                "diaplayName": "MyValue1"
            },
            "value2":{
                "id": "200",
                "diaplayName": "MyValue2"
            }
       }
}
}

Json文字列を以下のクラスに変換したい

  class ValueSet
   {
    [JsonProperty("id")]
    public string id
    {
        get;
        set;
    }
    [JsonProperty("values")]
    public List<Value> values
    {
        get;
        set;
    }
  }

class Value
{
    public string id
    {
        get;
        set;
    }
    public string DiaplayName
    {
        get;
        set;
    }
}

私の逆シリアル化コードは

JavaScriptSerializer js = new JavaScriptSerializer();
        StreamReader sr = new StreamReader(@"ValueSetJsonString.txt");
        string jsonString = sr.ReadToEnd();
        var items = JsonConvert.DeserializeObject<ValueSet>(jsonString);

しかし、シリアル化後に null 値を取得しています。これを解決するにはどうすればよいですか?

4

9 に答える 9

5

この行が完全に機能し、文字列に値が含まれていることを確認しましたか?

string jsonString = sr.ReadToEnd();

はいの場合は、最後の行で次のコードを試してください。

ValueSet items = JsonConvert.DeserializeObject<ValueSet>(jsonString);

または、json の配列がある場合は、次のように list を使用できます。

List<ValueSet> items = JsonConvert.DeserializeObject<List<ValueSet>>(jsonString);

幸運を

于 2013-10-25T07:41:22.633 に答える
2

データ構造と JSON が一致しません。

あなたのJSONはこれです:

{
    "JsonValues":{
        "id": "MyID",
        ...
    }
}

ただし、シリアル化しようとするデータ構造は次のとおりです。

class ValueSet
{
    [JsonProperty("id")]
    public string id
    {
        get;
        set;
    }
    ...
}

ステップをスキップしています: JSON は、データ構造JsonValuesのオブジェクトを値として持つ という名前の1 つのプロパティを持つクラスです。ValueSet

また、クラス内では、JSON は次のとおりです。

"values": { ... }

あなたのデータ構造はこれです:

[JsonProperty("values")]
public List<Value> values
{
    get;
    set;
}

{ .. }JSON ではオブジェクトを定義し、as[ .. ]では配列を定義することに注意してください。したがって、JSON によると、一連の値はありませんが、プロパティとtypeを持つone値オブジェクトがあります。value1value2Value

デシリアライザーは配列を想定していますが、代わりにオブジェクトを取得するため、可能な限り最も非破壊的な (例外) ことを行います: 値をスキップします。プロパティvaluesはデフォルト値のままです: null

可能な場合: JSON を調整します。以下はデータ構造と一致し、実際に必要なものである可能性が最も高いです。

{
    "id": "MyID",

     "values": [
         {
            "id": "100",
            "diaplayName": "MyValue1"
         }, {
            "id": "200",
            "diaplayName": "MyValue2"
         }
     ]
}
于 2013-10-25T06:11:46.790 に答える
0

一致しないjSon文字列があります。リストに変換したい場合は、これを試してください

{
    "id": "MyID",

     "values": [
        {
            "id": "100",
            "diaplayName": "MyValue1",
        },
        {
            "id": "200",
            "diaplayName": "MyValue2",
        }
   ]    
}
于 2013-10-25T06:11:09.333 に答える
-4

これを行うには、Json.Net フレームワークを使用できます。ちょうどこのような :

Account account = JsonConvert.DeserializeObject<Account>(json);

ホームページ: http://json.codeplex.com/

これに関するドキュメント: http://james.newtonking.com/json/help/index.html#

于 2013-10-25T06:30:54.590 に答える