2015-10-16 10 views
5

プロパティとして表され、Iは項目のリストを埋めるために、「アイテム」プロパティを解析する方法を見つけ出すことができないとき読むJSON配列が付きオブジェクト「の項目#XXX」私はこのJSONテキストを持っている

{ 
    "response": { 
     "success": 1, 
     "current_time": 1445015502, 
     "items": { 
      "item1": { 
       "property1": 1, 
       "property2": "test", 
       "property3": 4.3 
      }, 
      "item2": { 
       "property1": 5, 
       "property2": "test2", 
       "property3": 7.8 
      } 
     } 
    } 
} 

それらはまだ私のクラスです:

public class Item 
{ 
    public int property1 { get; set; } 
    public string property2 { get; set; } 
    public double property3 { get; set; } 
} 

public class Response 
{ 
    public int success { get; set; } 
    public string message { get; set; } 
    public int current_time { get; set; } 
    public List<Item> items { get; set; } 
} 

public class RootObject 
{ 
    public Response response { get; set; } 
} 

はまた、いや、それはエラーではありません。 JSONテキストには[]もありません。 また、JSONの項目数は未定義です。

+0

@EdCottrell - 解析する質問でJSONと間違って何も...痛みが、完全に有効ではありません。 –

+0

そして、私は痛みの部分のための助け、それらの項目を解析する方法が必要ですか? – Arkarr

+0

@AlexeiLevenkovあなたが返信する前に私のコメントを削除しました。私はこれをモバイルデバイスで読んでいて、誤読していました。あなたは正しい。 –

答えて

0

itemsは彼JSON int型の配列ではない、それはオブジェクトです:

"items": { 
    "item1": { 
     "property1": 1, 
     "property2": "test", 
     "property3": 4.3 
    }, 
    "item2": { 
     "property1": 5, 
     "property2": "test2", 
     "property3": 7.8 
    } 
} 

だから、コレクションにデシリアライズしません。代わりに

public List<Item> items { get; set; } 

、そのためのタイプを作成します。

public class Items 
{ 
    public Item item1 { get; set; } 
    public Item item2 { get; set; } 
} 

そして、親オブジェクトにそれを使用します。

public class Response 
{ 
    public int success { get; set; } 
    public string message { get; set; } 
    public int current_time { get; set; } 
    public Items items { get; set; } 
} 
+0

さて、「#」は私のところから賢明ではなかった、それは例のためだけだった。また、私はこのアイテムをすべてダウンロードしたくないので、このソリューションはクールではありません。そして、アイテムのうち1つの名前を編集すると、あなたの解決策は機能しません。くそー。私は立ち往生している。また、ティエムの数はいつでも変更することができ、ハードコードする必要はありません。 – Arkarr

+0

@Arkarr:「すべてのアイテムをダウンロードする」とはどういう意味ですか? JSONレスポンスをバッファリングしていますか?そうでなければ不完全なJSON文字列の*部分*をデシリアライズするだけなので、デシリアライゼーション*はもっと難しくなります*。そして、はい、JSONのプロパティ名を編集する場合は、消費コードのプロパティ名を編集する必要があります。それはどこでもほぼ真実です。だから、問題が何であるか、あるいは何をしようとしているのかははっきりしていません。 – David

+0

まあ、ウェブサイトからJSON文字列をダウンロードします。私のexemplesと同じように文字列が返されるので、問題は発生しません。また、私は "ダウンロード"を意味するのではなく "ダウン"(今修正された、タイプミス)。 – Arkarr

4

これはJson.NETdynamicのおかげで達成するのは簡単です:

private RootObject Parse(string jsonString) 
{ 
    dynamic jsonObject = JsonConvert.DeserializeObject(jsonString); 
    RootObject parsed = new RootObject() 
    { 
     response = new Response() 
     { 
       success = jsonObject.response.success, 
       current_time = jsonObject.response.current_time, 
       message = jsonObject.response.message, 
       items = ParseItems(jsonObject.response.items) 
     } 
    }; 
    return parsed; 
} 

private List<Item> ParseItems(dynamic items) 
{ 
    List<Item> itemList = new List<Item>(); 
    foreach (var item in items) 
    { 
     itemList.Add(new Item() 
     { 
       property1 = item.Value.property1, 
       property2 = item.Value.property2, 
       property3 = item.Value.property3 
     }); 
    } 
    return itemList; 
} 
+0

さて、 – Arkarr

+0

問題ありません!JSONのサンプルを試してみましたが、それは魅力的でした。何か問題があったら、教えてください! –

+0

これは問題ありませんが、オブジェクト名が "item1"、 "item2"、 "item3" ...でもなく、完全なランダムな名前であれば、アドバイスで名前。それはまだ可能ですか? – Arkarr

関連する問題