使用Json.Net在c#中进行Json解析

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。而我使用的代码是:

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字符串下载完全没有问题,但程序在从JSON字符串反序列化时崩溃了。我猜测我在这里犯了一个非常愚蠢的错误,但我无法找出问题所在。请问有谁能帮我解决这个问题吗?提前感谢您的帮助。

2个回答

5

有一些网页可以帮助你从JSON生成数据模型(虽然不像F#的方式那么高级)。当你将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);

请注意,您可以根据自己的需求重新命名类,并使用这些名称代替生成的名称。

4
你在反序列化时简单地排除了 "Posts",如果你想反序列化 "Posts" 的内部项目,则必须在反序列化中提及它。请尝试以下代码:
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 - Fahim Ahmed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接