2012-10-01 49 views
0

7我有這樣一個網絡服務器中的JSON:反序列化JSON在Windows手機使用Json.NET

{"My Book List": [{"ID":"5","TYPE":"History","TITLE":"Ekannoborti","PRICE":"200","IMAGE":"Ekannoborti.jpg","DOWNLOAD LINK":"http://www.starhostbd.com/"}],"success":3} 

要反序列化到目前爲止,我已經做了:

public class Attributes 
    { 
     public string ID{ get; set; } 
     public string TYPE { get; set; } 
     public string TITLE { get; set; } 
     public string PRICE { get; set; } 
     public string IMAGE { get; set; } 
     public string DOWNLOADLINK { get; set; } 
    } 

    public class DataJsonAttributeContainer 
    { 
     public List<Attributes> attributes { get; set; } 
     //public Attributes attributes { get; set; } 
    } 

    public static T DeserializeFromJson<T>(string json) 
    { 
     T deserializedProduct = JsonConvert.DeserializeObject<T>(json); 
     return deserializedProduct; 
    } 

在&我代碼:

void webClient_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e) 
    { 
     //var deserializedJSON = JsonConvert.DeserializeObject<Attributes>(e.Result); 
     var container = DeserializeFromJson<DataJsonAttributeContainer>(e.Result); 
     string asd = container.attributes[0].DOWNLOADLINK[0].ToString(); 
     //string asd = deserializedJSON.DOWNLOADLINK[0].ToString(); 
    } 

的問題是:從調試wiindow我可以發即在e.Result中分配了數據,但容器保持爲空。如何解決這個問題呢 ?請幫忙 !

+0

隨着我的和pedro'd修改此代碼爲我工作。我可以提取整個鏈接。 但是你需要使用'string asd = container.attributes [0] .DOWNLOADLINK.ToString();'來獲得整個鏈接。在你的情況下,你只獲得第一個字符。 – saxos

回答

1

添加JsonProperty屬性的attributes屬性屬性名在JSON匹配,就像這樣:

public class DataJsonAttributeContainer 
{ 
    [JsonProperty("My Book List")] 
    public List<Attributes> attributes { get; set; } 
} 

此外,你應該添加一個JsonProperty屬性的Attributes.DOWNLOADLINK財產與「下載鏈接」值爲了匹配JSON屬性名稱。

+0

仍然在同一點得到空指針異常! –

+0

在這裏可以正常工作,但是我在上面的示例代碼中發現了一個錯誤:「My Book List」後面缺少一個「 –

+0

」抱歉!這是由於從實際的大型json文件複製粘貼而導致的錯字。 OK! –

0

乍一看,我認爲問題出在DOWNLOADLINK屬性上。 您的服務器返回「DOWNLOAD LINK」,但您的財產沒有名稱中的空格。

你應該在你的屬性來定義的JSON表示這樣的:

[JsonProperty(PropertyName = "DOWNLOAD LINK")] 
public string DOWNLOADLINK { get; set; } 

希望這有助於。

+0

仍然在同一點獲得空指針異常! –

0

實際上,這兩個以上的答案應該解決您的問題,你有俱樂部他們

public class MyBookList 
{ 
    public string ID { get; set; } 
    public string TYPE { get; set; } 
    public string TITLE { get; set; } 
    public string PRICE { get; set; } 
    public string IMAGE { get; set; } 

    [JsonProperty("DOWNLOAD LINK")] 
    public string DOWNLOADLINK { get; set; } 
} 

public class DataJsonAttributeContainer 
{ 
    [JsonProperty("My Book List")] 
    public List<MyBookList> MyBookList { get; set; } 

    public int success { get; set; } 
} 

var container = DeserializeFromJson<DataJsonAttributeContainer>(e.Result); 
string asd = container.attributes[0].DOWNLOADLINK.ToString(); 

嘗試用這些類。應該管用。