2012-04-01 37 views
0

私はjsonで作業するのが初めてです - 私は既存のjsonデータ構造を使って作業していますが、データを出力しようとしていますが、既存のデータ構造の一部が私を困惑させています。c#Deserialize入れ子json

次は私のJSONデータである:私は困惑している

{"supplier": 
    { 
    "supplierid":3590, 
    "code":"ENCLES", 
    "name":"Les Miserables", 
    "analyses":[], 
    "amenities":[], 
    "info": 
     "{\"Supplier\": 
      { 
      \"Name\":\"Les Miserables\", 
      \"LastUpdate\":\"2011-11-01T22:16:06Z\", 
      \"Address3\":\"London\", 
      \"Address2\":\"51 Shaftesbury Avenue\", 
      \"PostCode\":\"W1D 6BA\", 
      \"Address1\":\"Queen's Theatre\", 
      \"Address4\":\"\", 
      \"Address5\":\"\", 
      \"SupplierId\":3590, 
      \"SupplierCode\":\"ENCLES\" 
      } 
     }", 
     ... 
     } 

ビットは、情報データである - それは別のネストされたJSON文字列です。

私のクラスには、次のとおりです。データを試してみて、アクセスするための

public class TheatreListing 
{ 
    public supplier supplier; 
} 

public class supplier 
{ 
    public int? supplierid { get; set; } 
    public string code { get; set; } 
    public string name { get; set; } 
    public listingInfo info { get; set; } 
} 


public class listingInfo 
{ 
    public Address Supplier { get; set; } 

} 

public class Address 
{ 
    public string Address1 { get; set; } 
    public string Address2 { get; set; } 
    public string Address3 { get; set; } 
    public string Address4 { get; set; } 
    public string Address5 { get; set; } 
    public string PostCode { get; set; } 
} 

私のコードです:私は取得しています

TheatreListing tl = Json.Decode<TheatreListing>(json); 
StringBuilder sbb = new StringBuilder(); 
sbb.Append("Name = " + tl.supplier.name.ToString()); 
sbb.Append("<br />Supplier ID = " + tl.supplier.supplierid.ToString()); 
sbb.Append("<br />Code = " + tl.supplier.code.ToString()); 
sbb.Append("<br />Address = " + tl.supplier.info.Supplier.Address2.ToString()); 
litOutput.Text += sbb.ToString(); 

エラーメッセージは次のとおりです。

Cannot convert object of type 'System.String' to type 'listingInfo' 

缶だれでもしてくださいここに私の方法のエラーで私を導く?

乾杯

ナイジェル

+0

私は内部のものを直列化して 'string'にデシリアライズし、2番目のパスでそれを正しいタイプにデシリアライズすることをお勧めします。カスタムタイプのコンバータを登録することは可能かもしれませんが(理想的にはこのような醜い方法でネストされません):// –

+0

"info": "{\" Supplier \ ":..."情報 "ではない:{\"サプライヤー\ ":(前の引用符を入れないで中かっこ) – mho

答えて

0

問題は、私はTheatreListingへの変換は、あなたの現在のJSONのために失敗していると思うライン

TheatreListing tl = Json.Decode<TheatreListing>(json); 

の内側にあります。

JavascriptSerializerを使用して、動作しているかどうかを確認してください。

JavaScriptSerializer js = new JavaScriptSerializer(); 
TheatreListing tree = js.Deserialize <TheatreListing>(json); 
3

私は物事のカップルを見てお勧めします:既存のJSON

2からあなたのC#クラスを生成するjson2csharpを使用)

1)あなたのJSONをデシリアライズするjson.netを使用して、チャンピオンのように動作します!

関連する問題