c# - JSON 反序列化对象 HTTPWebResponse

标签 c# json json.net

我正在尝试获取我的 Web 请求 JSON 输出并解析它。这是输出

{
    "kind":"internal",
    "name":"SplashPageToggle_dg",
    "fullPath":"SplashPageToggle_dg",
    "generation":1255326,
    "selfLink":"https://link",
    "type":"stri ng",
    "records":[
        {
            "name":"enable_app1",
            "data":"0"
        },
        {
            "name":"enable_app2",
            "da ta":"0"
        },
        {
            "name":"enable_app3",
            "data":"0"
        },
        {
            "name":"enable_app4",
            "data":"0"
        },
        {
            "name":"enable_app5",
            "data":"0"
        },
        {
            "name":"enable_app6",
            "data":"1"
        },
        {
            "name":"enable_app7",
            "data":"0"
        },
        {
            "name":"enable_app8",
            "data":"0"
        },
        {
            "name":"enable_app9",
            "data":"0"
        },
        {
            "name":"enable_app10",
            "data":"0"
        }
    ]
}

我已经为这些结果创建了公共(public)类

public class RootObject
{
   public string kind { get; set; }
   public string name { get; set; }
   public string fullPath { get; set; }
   public int generation { get; set; }
   public string selfLink { get; set; }
   public string type { get; set; }
   public List<Record> records { get; set; }
}

public class Record
{
   public string name { get; set; }
   public string data { get; set; }
}

当我尝试反序列化 Record 类并选择名称时,我从 RootObject 类中获取名称。这是我的代码

static void Main(string[] args)
{
   string url = "URL";    
   HttpWebRequest getRequest = (HttpWebRequest)WebRequest.Create(url);
   getRequest.Method = "GET";
   getRequest.Credentials = new NetworkCredential("UN", "PW");   
   ServicePointManager.ServerCertificateValidationCallback = new
      RemoteCertificateValidationCallback
      (
         delegate { return true; }
      );

   var getResponse = (HttpWebResponse)getRequest.GetResponse();    
   Stream newStream = getResponse.GetResponseStream();
   StreamReader sr = new StreamReader(newStream);    
   var result = sr.ReadToEnd();    
   var splashInfo = JsonConvert.DeserializeObject<Record>(result);

   Console.WriteLine(splashInfo.name);
   Console.ReadLine();
}

最佳答案

您正在尝试将 JSON 反序列化为错误的类。

改变这一行:

var splashInfo = JsonConvert.DeserializeObject<Record>(result);

为此:

var splashInfo = JsonConvert.DeserializeObject<RootObject>(result);

fiddle :https://dotnetfiddle.net/2xR7hO

关于c# - JSON 反序列化对象 HTTPWebResponse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38312627/

相关文章:

c# - 指示服务器请求失败的最佳实践方法?

c# - 如何分辨 "if on development environment"?

c# - 如何获取表中的方法列表?

c# - 如何使用 ANTLR 获得正确的编码?

php - 将 MySQL 输出解析为 JSON 提取字段名称

c# - 从 JWT token 获取声明、权限和角色

javascript - 使用 D3 从休息服务获取数据

json - 从 databricks 事件的 runOutput 参数中提取嵌套信息

json.net - Newtonsoft.Json 具有用于匿名类型的长 $type 字符串

c# - 使用自定义 ContractResolver,如何在将 null JSON 属性反序列化为值类型成员时设置默认值而不是 null?