我正在尝试修复我的SendGridPlus库来处理SendGrid事件,但是我在API中对类别的处理方式不一致时遇到了一些麻烦.
在以下示例从SendGrid API引用获取的有效内容中,您会注意到category每个项的属性可以是单个字符串,也可以是字符串数组.
[
{
"email": "john.doe@sendgrid.com",
"timestamp": 1337966815,
"category": [
"newuser",
"transactional"
],
"event": "open"
},
{
"email": "jane.doe@sendgrid.com",
"timestamp": 1337966815,
"category": "olduser",
"event": "open"
}
]
Run Code Online (Sandbox Code Playgroud)
看起来像我这样制作JSON.NET的选择是在字符串进入之前修复字符串,或者配置JSON.NET以接受不正确的数据.如果我能逃脱它,我宁愿不做任何字符串解析.
有没有其他方法我可以使用Json.Net处理这个?
我想知道是否可以反序列化可能是对象或数组的JSON对象.
与此问题类似:杰克逊反序列化对象或数组
但是使用JSON.Net.
例
{
"response": {
"status":"success",
// Could be either a single object or an array of objects.
"data": {
"prop":"value"
}
// OR
"data": [
{"prop":"value"},
{"prop":"value"}
]
}
}
Run Code Online (Sandbox Code Playgroud) 一个例子是我从api中消耗json.api与json的返回方式不一致.假设您有一个作者,它具有Books []的属性.遗憾的是,在只有一本书的情况下,选择返回Author.Books(类型为Book).首选方法是在Author.Books []中返回一本Book.
当Jason.NET尝试反序列化一大块json并且找到"作者"时,Json.NET会引发序列化异常:{"Book":{...与"作者"混合:{"Book":[". ..
有没有解决的办法?
我有一个包含以下数据的json字符串
"air:FlightOptionsList": {
"air:FlightOption": [{
"LegRef": "hx5kk+3R2BKABGzqAAAAAA==",
"Destination": "LHE",
"Origin": "DXB",
"air:Option": {
"Key": "hx5kk+3R2BKA/FzqAAAAAA==",
"TravelTime": "P0DT3H0M0S",
"air:BookingInfo": {
"BookingCode": "I",
"BookingCount": "7",
"CabinClass": "Economy",
"FareInfoRef": "hx5kk+3R2BKAzFzqAAAAAA==",
"SegmentRef": "hx5kk+3R2BKAtFzqAAAAAA=="
}
}
}, {
"LegRef": "hx5kk+3R2BKAFGzqAAAAAA==",
"Destination": "DXB",
"Origin": "LHE",
"air:Option": {
"Key": "hx5kk+3R2BKACGzqAAAAAA==",
"TravelTime": "P0DT11H30M0S",
"air:BookingInfo": [{
"BookingCode": "U",
"BookingCount": "7",
"CabinClass": "Economy",
"FareInfoRef": "hx5kk+3R2BKA+FzqAAAAAA==",
"SegmentRef": "hx5kk+3R2BKAvFzqAAAAAA=="
}, {
"BookingCode": "Y",
"BookingCount": "9",
"CabinClass": "Economy",
"FareInfoRef": "hx5kk+3R2BKA+FzqAAAAAA==",
"SegmentRef": "hx5kk+3R2BKAxFzqAAAAAA=="
}
],
"air:Connection": {
"SegmentIndex": "0"
}
}
}
]
} …Run Code Online (Sandbox Code Playgroud)