【发布时间】:2019-09-24 09:00:51
【问题描述】:
我需要反序列化以下 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());
帮我解决。提前致谢。
【问题讨论】:
-
SuccessStatus 的类定义是什么?
-
@User965207 successStatus 是我用来声明状态结果的局部变量类型,采用 json 格式。
标签: c# list json.net nunit deserialization