2017-03-29 20 views
2

私は愚かかもしれませんが、私はこの1つに固執しています。擬似json配列をデシリアライズしてCにする方法#

私はC#でコーディングしていて、JSON文字列をオブジェクトとして解析しようとしています。 問題は、文字列に擬似配列と呼ばれるデータフィールドが含まれていることです。それは実際の配列ではないので、[]が欠けています。

私は本当に500のプロパティを持つオブジェクトを作成したくありません。 APIのJSONレスポンス - しかし、私はこれをC#オブジェクトにどのように逆シリアル化しますか?

以下は、APIのドキュメントページのサンプルJSONです。 (私はAPIを所有していないため、JSONは変更できません)

アドバイスをいただければ幸いです。あなたのJSONオブジェクトの おかげ K

`

{ 
    "data": { 
     "71489": { <---- This is supposed to be an item in an array - but it isn't 
      "air_by_date": 0, 
      "cache": { 
       "banner": 1, 
       "poster": 1 
      }, 
      "language": "en", 
      "network": "USA Network", 
      "next_ep_airdate": "", 
      "paused": 0, 
      "quality": "HD720p", 
      "show_name": "Law & Order: Criminal Intent", 
      "status": "Ended", 
      "tvdbid": 71489, 
      "tvrage_id": 4203, 
      "tvrage_name": "Law & Order: Criminal Intent" 
     }, 
     "140141": { 
      "air_by_date": 0, 
      "cache": { 
       "banner": 0, 
       "poster": 0 
      }, 
      "language": "fr", 
      "network": "CBS", 
      "next_ep_airdate": "2012-01-15", 
      "paused": 0, 
      "quality": "Any", 
      "show_name": "Undercover Boss (US)", 
      "status": "Continuing", 
      "tvdbid": 140141, 
      "tvrage_id": 22657, 
      "tvrage_name": "Undercover Boss" 
     }, 
... 
     "194751": { 
      "air_by_date": 1, 
      "cache": { 
       "banner": 1, 
       "poster": 1 
      }, 
      "language": "en", 
      "network": "TBS Superstation", 
      "next_ep_airdate": 2011-11-28", 
      "paused": 0, 
      "quality": "Custom", 
      "show_name": "Conan (2010)", 
      "status": "Continuing", 
      "tvdbid": 194751, 
      "tvrage_id": 0, 
      "tvrage_name": "" 
     }, 
     "248261": { 
      "air_by_date": 0, 
      "cache": { 
       "banner": 1, 
       "poster": 1 
      }, 
      "language": "en", 
      "network": "Cartoon Network", 
      "next_ep_airdate": "", 
      "paused": 1, 
      "quality": "HD", 
      "show_name": "NTSF:SD:SUV::", 
      "status": "Continuing", 
      "tvdbid": 248261, 
      "tvrage_id": 28439, 
      "tvrage_name": "NTSF:SD:SUV" 
     } 
    }, 
    "message": "", 
    "result": "success" 
} 
` 
+0

(この場合は、数字列)適切なキーで各要素にアクセスする必要があります。 [不正なC#識別子の原因となるJSON文字列を解析するにはどうすればいいですか?](https://stackoverflow.com/q/24536533/3744182)と[名前がIDのjsonオブジェクトから強く型付けされたC#オブジェクトを作成する] https://stackoverflow.com/q/34213566/3744182)。 – dbc

答えて

0

dataプロパティは連想配列です。あなたが ``辞書 `へdata`をデシリアライズでき、以下の回答に加えて

// convert from a String into a JObject 
var data = JObject.Parse(json); 

// access single property 
Response.Write(data["data"]["71489"]); 
Response.Write(data["data"]["140141"]); 

// iterate all properties 
foreach (JProperty prop in data["data"]) 
{ 
    Response.Write(prop.Name + ": " + prop.Value); 

    // Also possible to access things like: 
    // - prop.Value["air_by_date"] 
    // - prop.Value["cache"]["banner"] 
    // - prop.Value["cache"]["poster"] 
    // - prop.Value["language"] 
} 
+0

これはまあまあですが、ありがとうございます。しかし、キーの値が何であるかを前もってどのように知っていますか?キーを反復処理する方法はありますか? – Keil

+0

@ケイル - はい、私はこれを行う方法を示すために私の答えを更新しました。 – dana

+1

あなたは揺れます!ありがとう - それは完全に動作します。 – Keil

関連する問題