2016-02-28 177 views
0

我在将JSON反序列化为对象时遇到问题。我读了几个答案,但他们都没有帮助我。
这是我的JSON文件:将JSON反序列化为.net对象

{ 
    "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); 

你能帮我弄清楚这个吗?提前致谢。

+2

*但我不知道如何操纵数据*这是什么意思? –

+0

例如,我想在一个数据库中存储博客名称,我不知道如何从“txt”获取该博客名称 – Garnyatar

+0

您的意思是'textInfo.response.blog.name'?请注意,您应该使用.NET命名约定,您目前不是。属性应该是PascalCase。 –

回答

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; } 
    } 
    
+0

谢谢,这工作得很好。 – Garnyatar

0

唯一的区别是,TextInfo应该包含元和响应:

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); 
0

TextInfo类没有任何属性里面反序列化。它只声明另一个类。根据你的来源,你应该反序列化为RootObject。这将返回一个具有metaresponse属性的实例。 然后你会访问他们:

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