【发布时间】:2023-03-12 02:35:02
【问题描述】:
我正在尝试将我的 JSON 字符串结果从 Rest-API 服务调用反序列化到我自己的类中:
收到 JSON 字符串:
{
"valid": true,
"messages": [
"Bank code valid: 065656"
],
"iban": "CH65765756756756756",
"bankData": {
"bankCode": "083243",
"name": "Banque of America",
"bic": "VZTRCH98XYY"
},
"checkResults": {
"bankCode": true
}
}
我的目标班级:
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
public class IBANValidationResult
{
[JsonProperty(PropertyName = "Valid")]
public bool Valid { get; set; }
[JsonProperty(PropertyName = "Messages")]
public List<string> Messages { get; set; }
[JsonProperty(PropertyName = "IBAN")]
public string IBAN { get; set; }
[JsonProperty(PropertyName = "BankData")]
public BankData BankData { get; set; }
[JsonProperty(PropertyName = "CheckResults")]
public CheckResults CheckResults { get; set; }
}
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
public class BankData
{
[JsonProperty(PropertyName = "BankCode")]
public string BankCode { get; set; }
[JsonProperty(PropertyName = "Name")]
public string Name { get; set; }
[JsonProperty(PropertyName = "BIC")]
public string BIC { get; set; }
}
[JsonObject(MemberSerialization = MemberSerialization.OptIn)]
public class CheckResults
{
[JsonProperty(PropertyName = "BankCode")]
public bool BankCode { get; set; }
}
这是我尝试将 json 字符串反序列化到我的类中的代码:
using (HttpResponseMessage res = await client.GetAsync(reqUri))
{
using (HttpContent content = res.Content)
{
var data = res.Content.ReadAsStringAsync();
var jsonObj = JSONConverter.DeserializeObject<IBANValidationResult>(data.Result);
}
}
我已经尝试了几种解决问题的方法,但总是收到相同的错误消息:
无法反序列化当前 JSON 对象(例如 {"name":"value"}) 输入类型 'System.Collections.Generic.List`1[OttosWebAPI.Models.Validation.IBANValidationResult]' 因为该类型需要一个 JSON 数组(例如 [1,2,3])来反序列化 正确。要修复此错误,请将 JSON 更改为 JSON 数组 (例如 [1,2,3])或更改反序列化类型,使其成为正常的 .NET 类型(例如,不是像整数这样的原始类型,也不是集合 可以从 JSON 反序列化的数组或列表等类型 目的。 JsonObjectAttribute 也可以添加到类型中来强制它 从 JSON 对象反序列化。路径“有效”,第 2 行,位置 10。
谁能告诉我,我在这里做错了什么?
谢谢
【问题讨论】:
-
我在阅读您的代码时注意到的事情:1)您没有等待异步操作。您应该等待
*Async()方法而不是使用.Result。 2)您的 JSON 和您的[JsonProperty]属性在命名上有所不同,因为它们有不同的情况。一个或两个都可能是掩盖问题。 -
是的,我知道我不等待,但由于我在后端调试,所以我是否等待并不重要。
-
那为什么还要让它异步呢?
-
我想稍后添加等待,当我完成编码时。
-
调试与否,它在功能上不正确,因此您可能会创建其他问题,从而使您的原始问题更难解决。
标签: c# json .net-core deserialization