2017-04-06 17 views
0

JSONレスポンスを解析し、それをJson2CSharpにコピー&ペーストして、新しく生成した2つのクラスを現在のクラスの最後に追加しようとしています。 (私は複数のクラスを扱うのが好きではありません)。私が午前問題は、私が生成されたクラスRootObjectにアクセスしようとしたとき、私はタイプの未処理の例外「Newtonsoft.Json.JsonSerializationException」はNewtonsoft.Json.dll
NewtonsoftでJSONを構文解析すると不正なフォーマットエラーが発生する

で発生した

のエラーが出るということです

追加情報:タイプを正しくデシリアライズするにはJSONオブジェクト(たとえば{"name": "value"})が必要なため、現在のJSON配列([1,2,3]など)をタイプ 'Test.RootObject'にデシリアライズできません。

構文が私のために変換されたにもかかわらず、私はそれを変更しませんでした。これが有効な有効な構文になるように変更する必要があるのは何ですか?

static void Main(string[] args) 
{ 
    string userid= "186exa"; 
    var url = "https/?rst=" + userid; 

    var connectionClient = new WebClient(); 
    connectionClient.Headers.Set("H", "XXXXXXXXXXXX"); 
    connectionClient.Headers.Set("uname", "user"); 
    connectionClient.Headers.Set("pswd", "pwd"); 
    var content = connectionClient.DownloadString(url); 
} 

EDIT
これはクラスです - コードを使用すると、故障の二つがあります。これは、retunred JSON

[{"Style":"Cajun","List":[{"id":1225,"cmu":"41.2","lno":10,"name":"Bear","origin":"Lake Sinclair, MO","MajorStyle":"Burn Yo Bottom","Style":"","styleImage":"","hid":1,"bqty":"1.00","cask":0,"local":0,"city":"Amsterdam"} 
+3

このコードは問題ではありません。クラスとJSONを提供してください。 – Simon

+0

JSONレスポンスの例を投稿してください。 – Sxntk

+0

@Simon - 要求された情報を含める更新された投稿。 –

答えて

1

ある

public class List 
{ 
    public int id { get; set; } 
    public string cmu { get; set; } 
    public int lno { get; set; } 
    public string clr { get; set; } 
    public string name { get; set; } 
    public string origin { get; set; } 
    public string MajorStyle { get; set; } 
    public string Style { get; set; } 
    public string styleImage { get; set; } 
    public int hid { get; set; } 
    public string bqty { get; set; } 
    public int cask { get; set; } 
    public int local { get; set; } 
    public string city { get; set; } 
} 

public class RootObject 
{ 
    public string style { get; set; } 
    public List<List> List { get; set; } 
} 

まもなくJSONを掲載します投稿されました。

  1. プロパティ "clr"はJSONに存在しません。
  2. JSONは途中で終了します。末尾には、}}]が正しいはずです。これらの問題の両方を修正

タイプRootObject []はそれを通過するとき、コードが通り、Newtonsoftで正しく構文解析:

sはJSON文字列である
var o = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject[]>(s); 

+0

を修正しないようにJSONレスポンスを読むことだけですので、関連するコードのみを使って答えを編集し、質問を書き直してください。 –

+0

変数はRootObject []型です。この場合、リストにはo [0] .Style、o [0] .List [0] .idなどを使用できる項目が1つしかありません。リストに複数の項目がある場合は、反復処理を行う必要があります。 – Simon

1

まず、あなたはその後、あなたがオブジェクトのキーワードを使用して

using Newtonsoft.Json; // Need this to work with JsonConvert 

string json = @"[ 
    { 
    'Style':'Cajun', 
    'List': 
     [ 
      { 
       'id':1225, 
       'cmu':'41.2', 
       'lno':10, 
       'name':'Bear', 
       'origin':'Lake Sinclair, MO', 
       'MajorStyle':'Burn Yo Bottom', 
       'Style':'', 
       'styleImage':'', 
       'hid':1, 
       'bqty':'1.00', 
       'cask':0, 
       'local':0, 
       'city':'Amsterdam' 
      } 
     ] 
    } 
]"; 
RootObject[] response = JsonConvert.DeserializeObject<RootObject[]>(json); 

への応答をマッピングする必要があり、あなたのクラスは

public class RootObject 
{ 
    public string Style { get; set; } 

    public List[] List { get; set; } 
} 

public class List 
{ 
    public int id { get; set; } 
    public string cmu { get; set; } 
    public int lno { get; set; } 
    public string clr { get; set; } 
    public string name { get; set; } 
    public string origin { get; set; } 
    public string MajorStyle { get; set; } 
    public string Style { get; set; } 
    public string styleImage { get; set; } 
    public int hid { get; set; } 
    public string bqty { get; set; } 
    public int cask { get; set; } 
    public int local { get; set; } 
    public string city { get; set; } 
} 

ようになっているはずですので、あなたのクラスは、あなたのJSONレスポンスと一致必要ListはC#のListというListもあるので、間違いにつながる可能性があるので注意してください。

関連する問題