反序列化Json C#检查是否列出
使用newtonsoft Json反序列化Json时出现问题 我有一节课反序列化Json C#检查是否列出,c#,arrays,json,serialization,json.net,C#,Arrays,Json,Serialization,Json.net,使用newtonsoft Json反序列化Json时出现问题 我有一节课 [Serializable] public class ValueAdd { [JsonProperty(PropertyName = "@id")] public string Description { get; set; } [JsonProperty(PropertyName = "@description")] public string Id { get; set; } }
[Serializable]
public class ValueAdd
{
[JsonProperty(PropertyName = "@id")]
public string Description { get; set; }
[JsonProperty(PropertyName = "@description")]
public string Id { get; set; }
}
[Serializable]
public class ValueAdds
{
public List<ValueAdd> ValueAdd { get; set; }
[JsonProperty(PropertyName = "@size")]
public string Size { get; set; }
}
但是当他们返回一个属性时,它并没有返回列表。。只能以这种方式返回:
"ValueAdds":
{
"@size": "1",
"ValueAdd":
{
"@id": "2103",
"description": "some property"
}
}
导致我的语法分析器错误
JsonConvert.DeserializeObject<ValueAdds>(_response);
JsonConvert.DeserializeObject(\u响应);
Newtonsoft.Json.dll中发生了类型为“Newtonsoft.Json.JsonSerializationException”的第一次意外异常
其他信息:无法将当前JSON对象(例如{“名称”:“值”})反序列化为“System.Collections.Generic.List`1[myproperty]”类型,因为该类型需要JSON数组(例如[1,2,3])才能正确反序列化
我的问题是,有没有办法解决它??我无法更改api响应,需要从我的角度进行更改,尝试解析是否存在列表。因为在您的
ValueAds
ValueAdd是列表,但在您的第二个json中它是单个实体,因此您无法分配它,您需要创建另一个模型
[Serializable]
public class ValueAdds2
{
public ValueAdd ValueAdd { get; set; }
[JsonProperty(PropertyName = "@size")]
public string Size { get; set; }
}
然后
JsonConvert.DeserializeObject(\u响应);
实际上,属性应该是数组或对象。你的回答应该是一致的
无论如何,要解决这个问题,您应该将它绑定到dynamic或object
[Serializable]
public class ValueAdds
{
public dynamic ValueAdd { get; set; }
[JsonProperty(PropertyName = "@size")]
public string Size { get; set; }
}
<> P>您应该检查<强> ValueAddia>强>类型.< /P>可能会帮助您创建一个合适的模型以获得正确的解决方案。您必须考虑使用自定义< <代码> JsonConverter < /代码>使用“<代码> SingleOrArrayConverter < /代码>”来解释这两种情况。
JsonConvert.DeserializeObject<ValueAdds2>(_response);
[Serializable]
public class ValueAdds
{
public dynamic ValueAdd { get; set; }
[JsonProperty(PropertyName = "@size")]
public string Size { get; set; }
}