2012-02-28 6 views
2

これは難しいことではありませんが、私は半時間ほどJSON.Netのドキュメントを見ていて、どのように動作しているのかわかりません。私はそれをセットアップしましたが、私の最初の試みは失敗しており、私がこれまで見てきたドキュメントは、(少なくとも私には)どのように配列フォームresponse.dataを逆シリアル化するのかを明らかにしていません。各レコードの個々のフィールド。Simple JSON deserializaiton

また、私はJSON.Netを使用する必要はありません。ちょうどよい選択のように思えました。どんな解決策もうまくいく。

{ 
    "request":{ 
     "Format":"json", 
     "Target":"Affiliate", 
     "Method":"findAll", 
     "Service":"HasOffers", 
     "Version":"2", 
     "NetworkId":"directagents", 
     "NetworkToken":"......" 
    }, 
    "response":{ 
     "status":1, 
     "data":{ 
      "2056":{ 
       "Affiliate":{ 
        "id":"2056", 
        "company": 
        "123 Greetings 123 Greetings (CD186)", 
        "address1":"1 Change Address", 
        "address2":"", 
        "city":"City", 
        "region":"NY", 
        "country":"US", 
        "other":null, 
        "zipcode":"11111", 
        "phone":"-", 
        "fax":null, 
        "website":null, 
        "signup_ip":null, 
        "date_added":"2012-02-24 18:00:24", 
        "modified":-62169966000, 
        "ref_id":"CD186", 
        "status":"pending", 
        "wants_alerts":"1", 
        "account_manager_id":"20", 
        "payment_method":"check", 
        "payment_terms":"net 30", 
        "w9_filed":"0", 
        "referral_id":null, 
        "affiliate_tier_id":null, 
        "fraud_activity_score":null, 
        "fraud_activity_alert_threshold":null, 
        "fraud_activity_block_threshold":null, 
        "fraud_profile_alert_threshold":null, 
        "fraud_profile_block_threshold":null, 
        "scrub_offer_pixels":null, 
        "shared":"0" 
        } 
       }, 
      "1606":{ 
            .......this is enough to see how its structured.... 
+0

あなたはどのようにデシリアライズしていますか?あなたはクラスを投稿できますか? –

+0

それは私の問題かもしれない、私はクラスがありません。私は、HTTP APIからのJSON文字列を持っています。 –

+0

私は、例jsonからクラスを生成するユーティリティを見つけようとしましたが、幸運はありません... –

答えて

2

あなたはDictionary<int, AffiliateHolder>ように、その「アレイ」をモデル化することができます。そのJSONのためのクラスは次のようになります。

class Top 
{ 
    public Request Request { get; set; } 
    public Response Response { get; set; } 
} 

class Request 
{ 
    public string Format { get;set; } 
    // etc. 
} 

class Response 
{ 
    public int Status { get; set; } 
    public Dictionary<int, AffiliateHolder> Data { get; set; } 
} 

class AffiliateHolder 
{ 
    public Affiliate Affiliate { get; set; } 
} 

class Affiliate 
{ 
    public int Id { get; set; } 
    // etc. 
} 

var o = JsonConvert.DeserializeObject<Top>(myJSONString); 
+1

うわー、うまくいきました!うわー!ありがとう。 –

0

私は、単純な例を作成することはできますが、そのような巨大なjsonは作成できません。 http://servicestack.net/を見てください。これはJson.NETの代替品です。より速く学習曲線が小さくなります。あなたはウェブサイト上でたくさんの例を見つけることができます。

+0

その配列を 'response.data'でどのように非直列化しますか? – svick

-1

これはjavascriptでですか?あなたはこれを行うことができるようになります。

JSON.parse(response.data) 
+0

私のターゲット言語は実際にはC#であり、コード例はHTTP GETから取得される文字列です。 –

2

最速、最も簡単な方法は、JSONにJson.NETとLINQを使用することです。上記のあなたの例を考えると、次のコード:

var parsedJson = JObject.Parse(rawJson); 
foreach (var item in parsedJson["response"]["data"]) 
{ 
    Console.WriteLine(item.ToString()); 
} 

は、コンソールに以下を記述します。

"2056": { 
    "Affiliate": { 
    "id": "2056", 
    "company": "123 Greetings 123 Greetings (CD186)", 
    "address1": "1 Change Address", 
    "address2": "", 
    "city": "City", 
    "region": "NY", 
    "country": "US", 
    "other": null, 
    "zipcode": "11111", 
    "phone": "-", 
    "fax": null, 
    "website": null, 
    "signup_ip": null, 
    "date_added": "2012-02-24 18:00:24", 
    "modified": -62169966000, 
    "ref_id": "CD186", 
    "status": "pending", 
    "wants_alerts": "1", 
    "account_manager_id": "20", 
    "payment_method": "check", 
    "payment_terms": "net 30", 
    "w9_filed": "0", 
    "referral_id": null, 
    "affiliate_tier_id": null, 
    "fraud_activity_score": null, 
    "fraud_activity_alert_threshold": null, 
    "fraud_activity_block_threshold": null, 
    "fraud_profile_alert_threshold": null, 
    "fraud_profile_block_threshold": null, 
    "scrub_offer_pixels": null, 
    "shared": "0" 
    } 
} 

明示的に直列化復元のための具体的なクラスを作成する必要はありません。明らかに、それがあなたのスタイルの好みであれば、それは完全に有効なアプローチです。

http://james.newtonking.com/projects/json/help/LINQtoJSON.htmlを参照してください。

+0

有効な代替案、ありがとう –