2012-01-17 178 views
0

我試圖解析一個JSON響應字符串到我的類對象..我無法弄清楚這一點,我需要一些幫助。反序列化與列表對象

我使用json.net參考,但我cant't找到我要找:(

的json:

{ 

"@companyName": "Company Name", 
"@version": "1.0", 
"@generatedDate": "3/1/10 2:10 PM", 
"application": [ 
    { 
     "@name": "Application #1 name", 
     "@apiKey": "1234", 
     "@createdDate": "2010-03-01", 
     "@platform": "Platform name" 
    }, 
    { 
     "@name": "Application #1 name", 
     "@apiKey": "1234", 
     "@createdDate": "2010-03-01", 
     "@platform": "Platform name" 
    } 
] 
} 

我對JSON根類是:

public class RootObject 
{ 
    [JsonProperty] 
    public string companyName { get; set; } 

    [JsonProperty] 
    public string version { get; set; } 

    [JsonProperty] 
    public string generatedDate { get; set; } 

    [JsonProperty] 
    public List<Application> application { get; set; } 
} 

我的子類(應用程序列表):

public class Application 
{ 
    [JsonProperty] 
    public string name { get; set; } 

    [JsonProperty] 
    public string apiKey { get; set; } 

    [JsonProperty] 
    public string createdDate { get; set; } 

    [JsonProperty] 
    public string platform { get; set; } 
} 

解析它,我有現在下面的代碼:

 JObject obj = JObject.Parse(e.Result); 
     applications = new RootObject 
      { 
       companyName = (string) obj["companyName"], 
       version = (string) obj["version"], 
       generatedDate = (string) obj["generatedDate"], 
       application = ???????? (how to make a list here?) 

      } 

提前感謝!

回答

4

更改您的類定義如下

public class RootObject 
{ 
    [JsonProperty("@companyName")] 
    public string companyName { get; set; } 

    [JsonProperty("@version")] 
    public string version { get; set; } 

    [JsonProperty("@generatedDate")] 
    public string generatedDate { get; set; } 

    public List<Application> application { get; set; } 
} 

public class Application 
{ 
    [JsonProperty("@name")] 
    public string name { get; set; } 

    [JsonProperty("@apiKey")] 
    public string apiKey { get; set; } 

    [JsonProperty("@createdDate")] 
    public string createdDate { get; set; } 

    [JsonProperty("@platform")] 
    public string platform { get; set; } 
} 

和反序列化

var rootObj = JsonConvert.DeserializeObject<RootObject>(myjson); 
+0

「@」字符的好處L.B.當我在回答問題時,我甚至沒有注意到他們。 :) – jdonley83

+0

無法將JSON對象反序列化爲類型'System.Collections.Generic.List'1 [應用程序] –

+1

它可以在我的機器上正常工作,但您也可以嘗試'public Application [] application {get;組; }' –

0

你可以試試下面的代碼並報告任何問題:

RootObject applications = JsonConvert.DeserializeObject<RootObject>(e.Result); 
+0

無法將JSON對象反序列化爲類型'System.Collections.Generic.List'1 [Flurry_Analytics.classes.Application]'。 –

+0

你的應用程序類是否標記爲可序列化? –

+0

不,它沒有標記爲可序列化 –

0

一個項目,我的工作偶爾會使用Json.Net。這是一個很棒的圖書館。 我會使用JsonConvert.DeserializeObject方法。

在你的情況我會嘗試這樣的事:

var result = JsonConvert.DeserializeObject<RootObject>(yourJsonString); 

這應該照顧它。

+0

我在應用程序列表中獲取錯誤:( 無法將JSON對象反序列化到類型'System.Collections.Generic.List'1 [應用程序] –

+0

@ user917769我得到它在一個測試應用程序工作。我不得不添加額外的參數給JsonProperty屬性,如在LB的答案,雖然爲了讓這個例子與這篇文章中的JSON一起工作 – jdonley83

+0

或者你可以刪除'@ 'json的字符,所以json屬性名稱與類屬性名稱匹配 – jdonley83