反序列化Json C#检查是否列出

反序列化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; } }

使用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 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; }
}