2013-07-23 41 views
4
{"Posts": 
      [{"id":"1", 
      "title":"Bibidh prothom khondo", 
      "content":"sjih sdkljjdsf kdjsfjks", 
      "author":"","last_update":"23 june 2013", 
      "Comments": 
       [{"id":"1", 
        "content":"sjih sdkljjdsf kdjsfjks", 
        "author":"","last_update":"23 june 2013"}]}, 
      {"id":"2", 
      "title":"Bibidh prothom khondo", 
      "content":"sjih sdkljjdsf kdjsfjks", 
      "author":"", 
      "last_update":"24 june 2013", 
      "Comments":[{"id":"1","content":"sjih sdkljjdsf kdjsfjks","author":"","last_update":"23 june 2013"}]},{"id":"3","title":"Bibidh prothom khondo","content":"sjih sdkljjdsf kdjsfjks","author":"","last_update":"25 june 2013"}]} 

我想解析這個JSON。 &爲此,我我的代碼是:Json解析在C#使用Json.Net

public class Attributes 
    { 
     [JsonProperty("id")] 
     public string ID { get; set; } 
     [JsonProperty("title")] 
     public string TITLE { get; set; } 
     [JsonProperty("content")] 
     public string CONTENT { get; set; } 
     [JsonProperty("author")] 
     public string AUTHOR { get; set; } 
     [JsonProperty("last_update")] 
     public string LAST_UPDATE { get; set; } 
     [JsonProperty("Comments")] 
     public string[] COMMENTS { get; set; } 
    } 

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

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

我曾經嘗試都的這種方式如下:

var container = DeserializeFromJson<DataJsonAttributeContainer>(e.Result); 

& var container = DeserializeFromJson<List<Attributes>>(e.Result);

JSON字符串sownloads完全正常,但程序崩潰中,同時從JSON反序列化串。 我想,我在這裏犯了一個非常愚蠢的錯誤&我弄不明白。任何人都可以在這方面幫助我嗎? 在此先感謝。

回答

4

u的根本不含Postsdeserializing,如果u想的Postsdeserialize內的項目,不是U不得不提到它在deserialization

試試這個:

var parsed = JObject.Parse(e.Result); 
var container = DeserializeFromJson<List<Attributes>>(parsed["Posts"]); 

var parsed = JsonSerializer.DeserializeFromString<Dictionary<string,string>>(e.Result); 
var container = DeserializeFromJson<List<Attributes>>(parsed["Posts"]); 
+1

很酷!我嘗試了第一個,它像一個魅力一樣工作!謝啦! :d –

5

有些頁面可以幫助您從JSON生成數據模型(儘管它是n與F#人們可以做到的一樣)。當在這個website上粘貼您的JSON並生成數據模型時,會彈出以下類。

public class Comment 
{ 
    public string id { get; set; } 
    public string content { get; set; } 
    public string author { get; set; } 
    public string last_update { get; set; } 
} 

public class Post 
{ 
    public string id { get; set; } 
    public string title { get; set; } 
    public string content { get; set; } 
    public string author { get; set; } 
    public string last_update { get; set; } 
    public List<Comment> Comments { get; set; } 
} 

public class RootObject 
{ 
    public List<Post> Posts { get; set; } 
} 

我猜你打電話給你的解析器然後如下,抓住你的屬性出來的:

var container = DeserializeFromJson<RootObject>(e.Result); 

請注意,如你願意,你可以重命名類,並使用這些名稱,而不是生成的。