2016-08-09 7 views
0

奇妙な複合json文字列をデシリアライズしようとしていますが、問題があります。2つのオブジェクト(そのオブジェクトのリスト)のリストを使用してJSONを逆シリアル化します。

現在のJSON配列([1,2,3]など)をタイプに「JSON」オブジェクト(例:{"name": "value")が必要なため、タイプ「Response」にデシリアライズできません。 })

JSONはこの

{ 
    "success":true, 
    "error":null, 
    "response":{ 
     "responses":[ 
     { 
      "success":true, 
      "error":null, 
      "response":{ 
       "ob":{ 
        "icon":"sunny.png", 
        "weatherShort":"Sunny" 
       } 
      }, 
      "request":"requeststring" 
     }, 
     { 
      "success":true, 
      "error":null, 
      "response":[ 
       { 
        "indice":{ 
        "current":{ 
         "dateTimeISO":"2016-08-09T10:00:00-05:00", 
         "indexENG":"dry" 
        } 
        } 
       } 
      ], 
      "request":"requeststring" 
     } 
     ] 
    } 
} 

のように見えるC#クラスを作成しようとしている問題は、応答リスト内Responseオブジェクトとレスポンスのリストがあるということです。ここで

は私のクラスの構造である:

public class Responses 
{ 
    public bool success { get; set; } 
    public object error { get; set; } 
    public Response response { get; set; } 
    public List<Response> responses { get; set; } 
    public string request { get; set; } 
} 

public class Indice 
{ 
    public Current current { get; set; } 
} 

public class Current 
{ 
    public string indexENG { get; set; } 
    public string dateTimeISO { get; set; } 
} 

public class Ob 
{ 
    public string icon { get; set; } 
    public string weatherShort { get; set; } 
} 

public class Response 
{ 
    public List<Responses> responses { get; set; } 
    public Indice indice { get; set; } 
    public Ob ob { get; set; } 
} 

public class RootJsonObject 
{ 
    public bool success { get; set; } 
    public object error { get; set; } 
    public Response response { get; set; } 
} 

私はレスポンス対象とレスポンスリストで応答リストを処理するために、ここで完全に間違って何かをやっていますか?

誰もが知りたい場合は、ここで私はそれをデシリアライズする方法です:Webリクエストから文字列であること

RootJsonObject obj = JsonConvert.DeserializeObject<RootJsonObject>(response); 

応答。

私はちょうどこの奇妙なJSONをC#クラスにマップする方法を理解しようとしています。私は非常にいくつかのクラス構造を試してきましたが、同じ例外を無関係にしているようです。私はC#クラスジェネレータも試しましたが、この特定のJSONの出力はあまりありません。任意の入力を感謝します!ありがとう!

+3

- 構造との間にも変化するため、 2つのネストされた応答。最初のネストされたレスポンスはJSONオブジェクトです。 2番目のネストされたレスポンスはJSON配列です。最初にこのJSONを作成しているのですが、より一貫して修正できますか? –

+0

残念ながら、これは私が使用しているAPIです。私は間違いなくこれを彼らと共有し、彼らがそれを修正するかどうかを見ていきます。私はちょうど私が最後にJSONの問題に対処する前に何か間違っていないことを確認したいと思った。入力いただきありがとうございます! –

答えて

1

JSONにエラーがあります。配列の2番目の要素には、古典的な中括弧をラップする角括弧があります。responseがコレクションであるかのように見えますが、そうではありません。タイプResponseであることが期待だ:

{ 
    "success": true, 
    "error": null, 
    "response": [ <<<HERE { 
     "indice": { 
      "current": { 
       "dateTimeISO": "2016-08-09T10:00:00-05:00", 
       "indexENG": "dry" 
      } 
     } 
    }] <<<HERE, 
    "request": "requeststring" 
} 

あなたはは、次のようになり受け取っているはずです。決勝、適切なJSON:JSONはかなり奇妙であることを

{ 
    'success': true, 
    'error': null, 
    'response': { 
     'responses': [{ 
      'success': true, 
      'error': null, 
      'response': { 
       'ob': { 
        'icon': 'sunny.png', 
        'weatherShort': 'Sunny' 
       } 
      }, 
      'request': 'requeststring' 
     }, { 
      'success': true, 
      'error': null, 
      'response': { 
       'indice': { 
        'current': { 
         'dateTimeISO': '2016-08-09T10:00:00-05:00', 
         'indexENG': 'dry' 
        } 
       } 
      }, 
      'request': 'requeststring' 
     }] 
    } 
} 
+0

彼らは最初の応答を配列として置いて別の呼び出しをするので、正しく逆シリアル化することができます。奇妙ですが、それは動作します。答えをありがとう! –

関連する問題