【发布时间】:2021-06-02 10:25:19
【问题描述】:
基本上我正在尝试编写一个测试来反序列化对 Customer 对象的 JSON 响应并断言 Firstname 是“Darron”
JSON 对象
{
"Id": 615,
"Customer": {
"Id": 726,
"MemberNodeId": 2257,
"EmailAddress": "Darron_Lips@email.com",
"Deleted": false,
"LastModifiedBy": "CUSTOMER",
"LastModifiedOn": "2021-06-02T08:54:38.243Z",
"CreatedBy": "CUSTOMER",
"CreatedOn": "2021-06-02T08:54:38.243Z"
},
"Title": {
"Id": 1,
"Title": "Mr"
},
"Firstname": "Darron",
"Lastname": "Lips",
"Gender": "Male",
"DateOfBirth": "1977-11-21T00:00:00Z",
"Height": 241.000000000,
"Weight": 204.000000000,
"LastModifiedBy": "CUSTOMER",
"LastModifiedOn": "2021-06-02T08:54:38.257Z",
"CreatedBy": "CUSTOMER",
"CreatedOn": "2021-06-02T08:54:38.257Z"
}
]
客户模型
public class Customer
{
[JsonProperty("Id")]
public int Id { get; set; }
[JsonProperty("MemberNodeId")]
public int MemberNodeId { get; set; }
[JsonProperty("EmailAddress")]
public string EmailAddress { get; set; }
[JsonProperty("Deleted")]
public bool Deleted { get; set; }
[JsonProperty("LastModifiedBy")]
public string LastModifiedBy { get; set; }
[JsonProperty("LastModifiedOn")]
public DateTime LastModifiedOn { get; set; }
[JsonProperty("CreatedBy")]
public string CreatedBy { get; set; }
[JsonProperty("CreatedOn")]
public DateTime CreatedOn { get; set; }
}
public class CustomerTitle
{
[JsonProperty("Id")]
public int Id { get; set; }
[JsonProperty("Title")]
public string Title { get; set; }
}
public class Root
{
[JsonProperty("Id")]
public int Id { get; set; }
[JsonProperty("Customer")]
public Customer Customer { get; set; }
[JsonProperty("Title")]
public string Title { get; set; }
[JsonProperty("Firstname")]
public string Firstname { get; set; }
[JsonProperty("Lastname")]
public string Lastname { get; set; }
[JsonProperty("Gender")]
public string Gender { get; set; }
[JsonProperty("DateOfBirth")]
public DateTime DateOfBirth { get; set; }
[JsonProperty("Height")]
public int Height { get; set; }
[JsonProperty("Weight")]
public int Weight { get; set; }
[JsonProperty("LastModifiedBy")]
public object LastModifiedBy { get; set; }
[JsonProperty("LastModifiedOn")]
public DateTime LastModifiedOn { get; set; }
[JsonProperty("CreatedBy")]
public string CreatedBy { get; set; }
[JsonProperty("CreatedOn")]
public DateTime CreatedOn { get; set; }
}
}
和测试
[Test]
public void CanGetCustomerDetails()
{
RestClient client = new RestClient(baseUrl);
RestRequest request = new RestRequest("CustomerDetailsApi/GetAll", Method.GET);
request.AddHeader("Authorization", $"Bearer {token}");
IRestResponse response = client.Execute(request);
}
到目前为止我已经尝试过
var customer = client.Execute(request).Content;
var responsea = JsonConvert.DeserializeObject<List<Customer>>(customer);
Assert.AreEqual(responsea, "firstname");
和
var customer = client.Execute(request).Content;
var responsea = JsonConvert.DeserializeObject<Customer>(customer);
导致:
"Newtonsoft.Json.JsonSerializationException: '无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型"
【问题讨论】:
-
您的示例 json 缺少开头
[,这是 C+P 错误,还是您的 json 真的像那样? -
从异常报错看来是题型错字。
-
您的 JSON 与您的课程不匹配。首先,您应该反序列化为
List<Root>,但您还需要修改该类以具有Title属性的子类。此外,身高和体重的这些数字不能反序列化为int属性。 -
您是否尝试反序列化根对象列表?您会发现其他错误,例如将属性 Title 定义为字符串而不是 CustomerTitle 以及一些无法分配给整数(宽度/高度)但反序列化有效的值,您可以使用该列表来检查 firstname 属性
-
@DavidG 它没有,很好发现谢谢