2012-04-01 189 views
0

我是新來的使用json - 我正在使用現有的json數據結構並嘗試輸出數據,但現有數據結構的一部分讓我難住。c#反序列化嵌套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

我會建議反序列化內部的東西到一個「串」,然後反序列化,在第二遍傳遞給正確的類型。它可能會註冊一個自定義類型的轉換器,但是...(理想情況下,它不會嵌套在這樣一個醜陋的方式: - /) – 2012-04-01 23:28:19

+0

對不起,應該「info」:「{\」Supplier \ 「:...不是」信息「:{\」供應商\「:(無先前引用的大括號)以及結束大括號的相同事情? – mho 2012-04-02 02:13:46

回答

0

的問題是線

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

我想轉換爲TheatreListing失敗您當前的JSON內。

爲什麼不嘗試使用JavascriptSerializer並查看它是否有效。

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

我建議在看一兩件事情:

1)使用json2csharp從現有的JSON

2)使用json.net到反序列化JSON生成的C#類,就像一個冠軍!