将JSON反序列化为.net对象

时间:2016-02-28 10:52:32

标签: c# json

我遇到了将JSON反序列化为对象的问题。我读了几个答案,但没有一个能帮助我 这是我的JSON文件:

    {
   "meta": {
      "status": 200,
      "msg": "OK"
   },
   "response": {
      "blog": {
         "title": "title",
         "name": "name",
         "url": "url"

      }
   }
}  

这是我的班级:

public class TextInfo
    {
        public class Meta
        {
            public int status { get; set; }
            public string msg { get; set; }
        }

        public class Blog
        {
            public string title { get; set; }
            public string name { get; set; }
            public string url { get; set; }

        }

        public class Response
        {
            public Blog blog { get; set; }
        }

        public class RootObject
        {
            public Meta meta { get; set; }
            public Response response { get; set; }
        }
    }

现在,我试图像这样反序列化json,但我不知道如何操作数据:

TextInfo txt = JsonConvert.DeserializeObject<TextInfo>(json);
你可以帮我解决这个问题吗?提前谢谢。

3 个答案:

答案 0 :(得分:0)

唯一的区别是TextInfo应该包含Meta和Response:

public class TextInfo
{
    public Meta meta { get; set; }
    public Response response { get; set; }
}

public class Meta
{
    public int status { get; set; }
    public string msg { get; set; }
}

public class Blog
{
    public string title { get; set; }
    public string name { get; set; }
    public string url { get; set; }
}

public class Response
{
    public Blog blog { get; set; }
}

你像你说的那样反序列化:

TextInfo txt = JsonConvert.DeserializeObject<TextInfo>(json);

答案 1 :(得分:0)

三件事:

  1. 可以提供错误消息/日志,

  2. 你只解析一个项目还是多个项目?在第二种情况下:var txt = JsonConvert.DeserializeObject<List<TextInfo>>(JSONstr);

  3. 请尝试以下操作:

    public class Meta
    {
        public int status { get; set; }
        public string msg { get; set; }
    }
    
    public class Response
    {
        public Blog blog { get; set; }
    }
    
    public class Blog
    {
        public string title { get; set; }
        public string name { get; set; }
        public string url { get; set; }
    
    }
    
    public class TextInfo
    {
        public Meta meta { get; set; }
        public Response response { get; set; }
    }
    

答案 2 :(得分:0)

您的TextInfo类中没有任何要反序列化的属性。它只宣布另一个类。 根据您的消息来源,您应该反序列化为RootObject。这将返回一个包含metaresponse属性的实例。 然后你就可以访问它们了:

RootObject obj = JsonConvert.DeserializeObject<RootObject>(json);
Console.WriteLine(obj.meta.msg);