【问题标题】:Having trouble parsing JSON stream,解析 JSON 流时遇到问题,
【发布时间】:2015-01-24 01:47:17
【问题描述】:

我能够使用 C# .Net 中的基本身份验证和 HTTPWebResponse 连接到供应商的 Web API。我能够在 StreamReader 中获取 JSON 流,但是在解析 JSON 时,我得到空值并且无法获取单个字符串或变量中的数据元素。请查看随附的 JSON 文件和帮助...

这是我的代码...

 username = "****";
 var password = "***";
 var url = "*****";
 var encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username  + ":" + password));
 var webRequest = (HttpWebRequest)WebRequest.Create(url);
 webRequest.Headers.Add("Authorization", "Basic " + encoded);
 webRequest.Method = "GET";
 webRequest.Accept = "application/json";
 webRequest.ContentType = "application/json";


 var webResponse = (HttpWebResponse)webRequest.GetResponse();
 var reader = new StreamReader(webResponse.GetResponseStream());
 string s = reader.ReadToEnd();

尝试了所有解决方案,但遇到了麻烦。下面是我的一些 JSON 流。

{"status":"success","message":"笔记请求处理成功,返回100条记录。","data":[{"noteId":"0000","studentId ":"000000","advisorId":"0000111","dateCreated":"01/20/2015","studentStatus":"On path","noteBody":"这是一个测试笔记,它用于一个特定的学生。它适用于学生 000000","edited":"N","dateEdited":"N/A","privateNote":"N","re​​moved":"N","re​​movedDate":" N/A","displayDate":"01/20/2015","noteCreatedWithReminder":"N","noteCreatedWithStatusChange":"N"},{"noteId":"0001","studentId":"000001" ,"advisorId":"0000111","dateCreated":"01/20/2015","studentStatus":"进行中","noteBody":"这是一个测试笔记,它是针对特定学生的。它适用于学生 000001","edited":"N","dateEdited":"N/A","privateNote":"N","re​​moved":"N","re​​movedDate":"N/A", "displayDate":"01/20/2015","noteCreatedWithReminder":"N","noteCreatedWithStatusChange":"Y"}

【问题讨论】:

  • “无法获取单个字符串或变量中的数据元素。” --Hpw 你是在提取那些单独的字符串或变量吗?

标签: c# asp.net json


【解决方案1】:

我建议使用诸如JSON.net 之类的库,它会更容易解析,您需要做的就是创建模型类:

public class Note
{
    public string noteId { get; set; }
    public string studentId { get; set; }
    public string advisorId { get; set; }
    public string dateCreated { get; set; }
    public string studentStatus { get; set; }
    public string noteBody { get; set; }
    public string edited { get; set; }
    public string dateEdited { get; set; }
    public string privateNote { get; set; }
    public string removed { get; set; }
    public string removedDate { get; set; }
    public string displayDate { get; set; }
    public string noteCreatedWithReminder { get; set; }
    public string noteCreatedWithStatusChange { get; set; }
}

public class Response
{
    public string status { get; set; }
    public string message { get; set; }
    public List<Note> notes { get; set; }
}

那么这就是你的解析方式

var response = JsonConvert.DeserializeObject<Response>(json);
Console.WriteLine("status =" + response.status);

【讨论】:

  • 这很好用!如何让列表(注释)绑定到 GridView?抱歉,新来的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-28
  • 2012-11-12
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多