asp.net - ASP.NET JavaScriptSerializer 反序列化不返回结果
问题描述
我正在发布到我客户的新 API,它正在返回:
{"status":{"statusCode":1,"errorType":2,"errorCode":9000,"errorMessage":"System could not process your request"}}
注意:返回的 JSON 包含 '\"'
在我的 C# 代码中,我定义了一个结构:
public struct userStatusStruct
{
public int statusCode { get; set; }
public int errorType { get; set; }
public int errorCode { get; set; }
public string errorMessage { get; set; }
}
然后,在 C# 中使用
loginResponse = (HttpWebResponse)request.GetResponse();
....
var streamResponse = new StreamReader(loginResponse.GetResponseStream()
....
var result = streamResponse.ReadToEnd();
我收到一个 statusCode.OK。结果字符串在上面: 然后将其反序列化到 Struct 中:
var vs = new JavaScriptSerializer().Deserialize<DataClass.userStatusStruct>(result);
反序列化 userStatusStruct 包含 0 和 string.empty。
我以前做过很多次,但这一次我很困惑为什么它没有将结果反序列化为结构格式。
解决方案
您的 JSON 对 无效userStatusStruct
,您需要定义另一个包含userStatusStruct
属性的类:
public class ApiResult
{
public userStatusStruct status { get; set; }
}
然后Deserialize
JSON 到ApiResult
,你可以得到status
如下:
var apiResult = new JavaScriptSerializer().Deserialize<DataClass.ApiResult>(result);
var vs = apiResult.status;
var statusCode = vs.statusCode;
//the other properties
推荐阅读
- laravel - Guzzle 似乎从请求 url 中删除了密码部分
- java - System.out.println("s1 == s2 is:" + s1 == s2) 和 System.out.println(s1 == s2) 有什么区别?
- bash - 是否可以将 perl 哈希保存到 bash 数组中?
- ios - 在运行时检测 Build 是否为 Testflight
- racket - 简单递归函数 - 获取一个字符串并返回 n 次
- python - 在 Flask App 中使用 Tensorflow 嵌入投影仪(将投影仪托管在网页上)
- discord.js - Discord.js-commando 我将如何检查提到的用户是否具有角色,例如静音角色?
- r - 计算 r 中的 7 天平均值
- neo4j - 如何在 Neo4J 中查询多个项目,按优先顺序只返回一个?
- r - github 操作找不到我的 R 包的文件