0

これは私が持っているJSONです

{
 "productNum":6,
 "01":
{"US_7":"pna886377847444","US_7_5":"pna886377847529","US_8":"pna886377847604","US_8_5":"pna886377847666","US_9":"pna886377847741","US_9_5":"pna886377847826","US_10":"pna886377847895","US_10_5":"pna886377847987","US_11":"pna886377848069","US_11_5":"pna886377848144","US_12":"pna886377848229","US_13":"pna886377848328","US_14":"pna886377848427"},

 "02":
{"US_7":"pna886377849103","US_7_5":"pna886377849202","US_8":"pna886377849295","US_8_5":"pna886377849394","US_9":"pna886377849493","US_9_5":"pna886377849592","US_10":"pna886377849660","US_10_5":"pna886377849745","US_11":"pna886377849820","US_11_5":"pna886377849905","US_12":"pna886377849981","US_13":"pna886377850086","US_14":"pna886377850185"}
}

データのより良いビュー:

より良い眺め

解析するにはどのクラスを記述すればよいですか?

4

4 に答える 4

2

json.Net を使用 - http://james.newtonking.com/pages/json-net.aspx

それを超えて、あなたの質問は一般的すぎます。それを行う方法はたくさんあります。簡単なアプローチは、クラスを作成し、そのProduct定義を次のように呼び出すことです。

 public class Product
 {
     int productNum;
     InnerData one;
     InnerData two;
 }

01シリアル化する前に、 and02oneandに書き換えますtwoInnerData次のようになります。

 public class InnerData
 {
     string US_1;
     string US_2;
     // rest of US_x fields
 }

次に、逆シリアル化メソッドを使用できます - http://james.newtonking.com/projects/json/help/index.html?topic=html/SerializingJSON.htm

 Product prod1 = jsonConvert.Deserialize<Product>(jsonString);
于 2013-05-01T20:03:53.163 に答える
2

02は有効なプロパティ名ではないため、これをクラスに変換できないようです。

Json.NetJObjectに付属するものを試してみてください。次のように機能します。Dictionary

サンプルは次のとおりです。

[Test]
public void Parse()
{
    const string src = @"{
    ""productNum"":6,
    ""01"":
    {""US_7"":""pna886377847444"",""US_7_5"":""pna886377847529"",""US_8"":""pna886377847604"",""US_8_5"":""pna886377847666"",""US_9"":""pna886377847741"",""US_9_5"":""p    na886377847826"",""US_10"":""pna886377847895"",""US_10_5"":""pna886377847987"",""US_11"":""pna886377848069"",""US_11_5"":""pna886377848144"",""US_12"":""pna88637784    8229"",""US_13"":""pna886377848328"",""US_14"":""pna886377848427""},

    ""02"":
    {""US_7"":""pna886377849103"",""US_7_5"":""pna886377849202"",""US_8"":""pna886377849295"",""US_8_5"":""pna886377849394"",""US_9"":""pna886377849493"",""US_9_5"":""p    na886377849592"",""US_10"":""pna886377849660"",""US_10_5"":""pna886377849745"",""US_11"":""pna886377849820"",""US_11_5"":""pna886377849905"",""US_12"":""pna88637784    9981"",""US_13"":""pna886377850086"",""US_14"":""pna886377850185""}
    }";

    // filtering out the "productNum:6"
    var dest =
        JsonConvert.DeserializeObject<IDictionary<string, object>>(src)
        .Where(x => x.Value.GetType() == typeof (JObject));


    foreach (var item in dest)
    {
        var obj = (JObject) item.Value;

        Console.WriteLine(item.Key);

        foreach (var d in obj)
        {
            Console.WriteLine("{0}: {1}", d.Key, d.Value);
        }
    }
}
于 2013-05-01T20:08:56.797 に答える
1

.Net 4.5 のDataContractSerializerを使用すると、「Name」属性で実際の名前を指定しながら、JSON 要素に任意の変数名を付けることができます。

したがって、クラスは次のようになります。

[DataContract]
public class MyData
{
     [DataMember(Name="01")]
     string Var1;

     ...
}

http://msdn.microsoft.com/en-us/library/bb412179.aspx

于 2013-05-01T22:51:46.670 に答える