我是Newtonsoft.Json的新手,所以请原谅我的无知 - 但是当试图将以下Json反序列化为ac #对象或实际上手动。当返回的值可以是数组或单个项目时,无法反序列化当前的JSON数组
的JSON是
{
"travellerInfo": [
{
"passengerData": {
"travellerInformation": {
"passenger": [
{
"type": "ADT",
"firstName": "MARY MRS"
},
{
"type": "INF",
"firstName": "JOSHUA"
}
],
"traveller": {
"surname": "SMITH",
"quantity": "2"
}
}
}
},
{
"passengerData": {
"travellerInformation": {
"passenger": {
"type": "ADT",
"firstName": "JOHN MR"
},
"traveller": {
"surname": "SMITH",
"quantity": "1"
}
}
}
}
]
}
因此,大家可以看到,在第一个“乘客”项目,这将返回为一个数组,但是在第二个“乘客”项目,它不会返回作为数组,只是一个块。我无法控制Json被发送给我 - 它来自外部系统。我的C#类是
public class Passenger
{
public string type { get; set; }
public string firstName { get; set; }
}
public class Traveller
{
public string surname { get; set; }
public string quantity { get; set; }
}
public class TravellerInformation
{
public List<Passenger> passenger { get; set; }
public Traveller traveller { get; set; }
}
public class PassengerData
{
public TravellerInformation travellerInformation { get; set; }
}
public class TravellerInfo
{
public PassengerData passengerData { get; set; }
}
,我叫
var example = JsonConvert.DeserializeObject<TravellerInfo>(jsonString);
我收到错误
Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'Script1.TravellerInfo' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.
Path 'travellerInfo', line 57, position 20.
我试图把一个[JsonArray]属性的客运班,迫使它deserialise作为一个数组/列表,但同样的错误发生,因为我认为基础项是JProperty而不是JObject。
那么我怎么能得到这个工作,当[“乘客”]可以回来作为一个数组和单个对象?
前进的欢呼声
我建议你使用[Json 2 C#](http://json2csharp.com/)web来生成你的类,或者在Visual Studio中特别粘贴 – Pikoh
显然,travellerInformation对象不可能同时拥有一个乘客属性作为单个实例**和**和数组。我认为在这种情况下我会做的是尝试修改Json(毕竟它是一个字符串),这样乘客属性总是**一个数组。所以找到一种方法来添加方括号,如果需要?下面是Java中的一个答案:http://stackoverflow.com/questions/21063367/jackson-mapping-object-or-list-of-object-depending-on-json-input – Oxonhammer
“Passenger”与错误无关你显示的是与你想要传递给TraverInfo对象的TraverInfo数组有关 - 除此之外,如果你控制创建数据,则将乘客改为始终为1或1的数组更多条目。如果没有,你可以在脚本端编写一个映射器来“修复”,在发送之前将单个对象封装到一个数组中? – Nope