EiE*_*Guy 1 json.net json-deserialization c#-7.0 httpresponsemessage asp.net-core-2.0
我正在 VS2017 中使用 ASP.NET Core 2.0。
我正在尝试反序列化一些返回的 JSON,HttpResponseMessage但我收到“无法转换类型的对象...”异常。
这是失败的代码;
FilesUploadedListResponse fileUploadListResponse = new FilesUploadedListResponse();
string jsonResult = response.Content.ReadAsStringAsync().Result;
fileUploadListResponse = (FilesUploadedListResponse)JsonConvert.DeserializeObject(jsonResult);
Run Code Online (Sandbox Code Playgroud)
最后一行是我得到异常的地方......
"Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'FilesUploadedListResponse'."
Run Code Online (Sandbox Code Playgroud)
这是字符串中的实际 Json jsonResult:
"{\"uploadedfiles\":[],\"totalResults\":0,\"pageNumber\":0,\"pageSize\":0}"
Run Code Online (Sandbox Code Playgroud)
uploadedFiles此结果中的数组为空,因为还没有上传的文件,但我认为将其设为空不应创建异常,对吗?如果它不为空,它会有类似这样的响应:
{
"uploadedFiles": [
{
"id": 1,
"createdTime": "July 10, 2017 02:02:25 PM",
"filename": "20170710_14022507701.jpg",
"sentTime": "July 10, 2017 02:05:11 PM",
"fileSize": "124 KB"
},
{
"id": 2,
"createdTime": "June 05, 2017 09:39:25 AM",
"filename": "20170605_093907701.jpg",
"sentTime": "June 05, 2017 09:40:11 AM",
"fileSize": "1 MB"
}
],
"totalResults": 2,
"pageNumber": 0,
"pageSize": 2
}
Run Code Online (Sandbox Code Playgroud)
这是我的FileUploadListResponse课:
public class FilesUploadedListResponse
{
public bool Success { get; set; }
public string Reason { get; set; }
public int StatusCode { get; set; }
public List<UploadedFile> UploadedFiles { get; set; }
public int TotalResults { get; set; }
public int PageNumber { get; set; }
public int PageSize { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我的UploadedFile课:
public class UploadedFile
{
public int Id { get; set; }
public DateTime CreatedTime { get; set; }
public string Filename { get; set; }
public DateTime? SentTime { get; set; }
public string FileSize { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我对 JSON 反序列化的理解是:
元素的大小写在 JSON 字符串中的值和我试图反序列化的类对象之间无关紧要。
我试图反序列化的类可以拥有比 JSON 字符串中提供的更多的属性,只要考虑到 JSON 字符串中的属性即可。
一个空的子数组,例如该UploadedFiles数组在尝试反序列化为List<UploadedFile>
我相信这很简单,但我只是没有看到。我在这里缺少什么?
dbc*_*dbc 10
当您调用非泛型方法时JsonConvert.DeserializeObject(jsonResult),您要求 Json.NET 将传入的 JSON 反序列化为它自己选择的某种足以捕获传入 JSON 的.Net 类型。它实际上选择的是LINQ to JSON JObject。由于此类型不能隐式或显式转换为您的FilesUploadedListResponse类型,因此您会看到您看到的异常。
由于反序列化到一个特定的已知类型,你应该改为调用通用的方法JsonConvert.DeserializeObject<FilesUploadedListResponse>(jso??nResult),其反序列化JSON的到指定的.NET类型,如下所示:
string jsonResult = response.Content.ReadAsStringAsync().Result;
var fileUploadListResponse = JsonConvert.DeserializeObject<FilesUploadedListResponse>(jsonResult);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11342 次 |
| 最近记录: |