c# - C# Web Api - NUnit 测试 - Newtonsoft.Json.JsonSerializationException
问题描述
我需要反序列化以下 JSON 字符串。
{"status":"success","data":[{"id":4,"domainTitle":"Java","isDeleted":true},{"id":5,"domainTitle":"PHP" ,"isDeleted":true},{"id":6,"domainTitle":"Angular","isDeleted":true}]}
相同的测试代码是:
[Test]
public async Task TestGetDeletedDomainsAsync_UserDomains_StatusCodeOK()
{
using (var adminController = new AdminController(_adminService.Object))
{
//act
var response = _adminController.GetDeletedDomainsAsync();
var successStatus = await response.Content.ReadAsAsync<SuccessStatus>();
var returnData = JsonConvert.DeserializeObject<List<Domain>>(successStatus.Data.ToString());
// assert
Assert.Multiple(() =>
{
Assert.That(response, Is.TypeOf<HttpResponseMessage>());
Assert.That(returnData, Is.TypeOf<List<Domain>>());
Assert.AreEqual(response.StatusCode, HttpStatusCode.OK);
Assert.IsNotNull(successStatus);
Assert.AreEqual("success", successStatus.Status);
Assert.IsNotNull(returnData);
//checking if same object goes to service and also if that service is called once
_adminService.Verify(s => s.GetDeletedDomains(), Times.Once);
});
}
}
但是当我尝试使用反序列化器时,它给出了一个异常。
Newtonsoft.Json.JsonSerializationException:无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型“System.Collections.Generic.List`1[IMS_NL.Models.Domain]”,因为该类型需要 JSON数组(例如 [1,2,3])正确反序列化。要修复此错误,请将 JSON 更改为 JSON 数组(例如 [1,2,3])或更改反序列化类型,使其成为普通的 .NET 类型(例如,不是像整数这样的原始类型,而不是像这样的集合类型可以从 JSON 对象反序列化的数组或列表。JsonObjectAttribute 也可以添加到类型中以强制它从 JSON 对象反序列化。
显示上述错误的行是——
var returnData = JsonConvert.DeserializeObject<List<Domain>>(successStatus.Data.ToString());
帮我解决一下。提前致谢。
解决方案
您需要创建一个与您的 JSON 字符串相对应的类
public class Answer
{
public string Status { get; set; }
public List<Domain> Data { get; set; }
}
public class Domain
{
public int Id { get; set; }
public string DomainTitle { get; set; }
public bool IsDeleted { get; set; }
}
然后使用
var returnData = JsonConvert.DeserializeObject<Answer>(successStatus.Data.ToString());
推荐阅读
- dataframe - 火花数据框在加入后没有正确划分
- visual-studio-2012 - 在 VS 对话框资源编辑器中编辑控件的大小和位置
- apache-spark - salesforce spark read 是不是很懒
- c# - Xamarin:是否可以在 App.cs 文件中包含我的字体资源?
- cplex - 在 Cplex 中使用给定的概率分布对提前期建模
- imap - 是否可以使用 Apple 登录通过 IMAP 访问 Apple 邮件?
- javascript - 从电子邮件中获取用户身份验证(未登录)
- excel - VBA 代码中的单个单元格无法正确粘贴
- javascript - Node.js:读取长 JSON 文件总是会剪切最后一个右括号字符
- .net - Dotnet 构建返回不同的结果