繁体   English   中英

无法在C#中解析JSON响应

[英]Unable To Parse JSON Response in C#

我试图解析一个whois json响应,但是当我尝试解析它时,我得到空值。

string html;
string whoisUrl = "https://whois.apitruck.com/:google.com";

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(whoisUrl);
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
    using (StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.ASCII))
    {
        html = reader.ReadToEnd();
    }
}
Class1 m = JsonConvert.DeserializeObject<Class1>(html);
MessageBox.Show(m.created);

宾语

class Class1
{
    public string created { get; set; }
}

谁能指出我在这里做错了什么?

您的Class1没有获取值,因为“created”是“响应”的一部分,而不是JSON响应的根级别。

您需要使用dynamic或为类创建层次结构以进行简单修复。

class Class1
{
    public Response Response { get; set; }
}

class Response
{
    public string created { get; set; }
}

然后你可以使用这个:

Class1 m = JsonConvert.DeserializeObject<Class1>(html);
MessageBox.Show(m.Response.created);

UPDATE

另外,这是一个如何使用dynamic的示例:

var m = JsonConvert.DeserializeObject<dynamic>(html);
DateTime created = (DateTime)m.response.created;

有一个很好的应用程序将json转换为.net类:

public class Registrar
{
    public string id { get; set; }
    public string name { get; set; }
    public object email { get; set; }
    public string url { get; set; }
}

public class Response
{
    public string name { get; set; }
    public string idnName { get; set; }
    public List<string> status { get; set; }
    public List<string> nameserver { get; set; }
    public object ips { get; set; }
    public string created { get; set; }
    public string changed { get; set; }
    public string expires { get; set; }
    public bool registered { get; set; }
    public bool dnssec { get; set; }
    public string whoisserver { get; set; }
    public List<object> contacts { get; set; }
    public Registrar registrar { get; set; }
    public List<string> rawdata { get; set; }
    public object network { get; set; }
    public object exception { get; set; }
    public bool parsedContacts { get; set; }
}

public class RootObject
{
    public int error { get; set; }
    public Response response { get; set; }
}

...

RootObject result = JsonConvert.DeserializeObject<RootObject>(html);
var created = result.response.created;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM