Json解析类型发生变化的对象
我正在编写一个用于使用UptimeRobot API的.Net标准库。我发现了一个端点,它有时返回一个Json解析类型发生变化的对象,json,.net-core,json.net,Json,.net Core,Json.net,我正在编写一个用于使用UptimeRobot API的.Net标准库。我发现了一个端点,它有时返回一个int数组,有时返回一个0 我使用的字段是监视器 { "stat": "ok", "pagination": { "offset": 0, "limit": 50, "total": 2 }, "psps": [ { "id": 2345678, "friendly_name": "Full Status", "
int
数组,有时返回一个0
我使用的字段是监视器
{
"stat": "ok",
"pagination": {
"offset": 0,
"limit": 50,
"total": 2
},
"psps": [
{
"id": 2345678,
"friendly_name": "Full Status",
"monitors": 0,
"sort": 1,
"status": 1,
"standard_url": "https://stats.uptimerobot.com/xxxxxx",
"custom_url": ""
},
{
"id": 123456,
"friendly_name": "Filtered Status",
"monitors": [
783210435,
783210481
],
"sort": 1,
"status": 1,
"standard_url": "https://stats.uptimerobot.com/xxxxxx",
"custom_url": ""
}
]
}
这是我的模型:
使用Newtonsoft.Json;
使用System.Collections.Generic;
使用锐化.Common.Types;
使用System.Diagnostics.CodeAnalysis;
命名空间锐化.Common.Models.PublicStatusPages
{
公共类PublicStatusPage
{
[不包括CODECODECOVERAGE]
[JsonProperty(PropertyName=“id”)]
公共int Id{get;set;}
[JsonProperty(PropertyName=“friendly_name”)]
公共字符串名称{get;set;}
[JsonProperty(PropertyName=“monitors”)]
公共列表监视器{get;set;}
[JsonProperty(PropertyName=“sort”)]
公共整数排序{get;set;}
[JsonProperty(PropertyName=“status”)]
PublicPublicStatusPageStatusType状态{get;set;}
[JsonProperty(PropertyName=“标准url”)]
公共字符串标准URL{get;set;}
[JsonProperty(PropertyName=“custom_url”)]
公共字符串CustomURL{get;set;}
}
}
如果我将查询限制为仅包含数组的结果,那么监视器
对象将进行解析,但如果我尝试引入另一个结果,则会失败
有什么想法吗?我甚至不能100%确定用什么措辞来试图解决这个问题 您可以使用转换器来转换只有一个项目要列出的情况。例如,考虑以下转换器
class SingleOrArrayConverter<T> : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return (objectType == typeof(List<T>));
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JToken token = JToken.Load(reader);
if (token.Type == JTokenType.Array)
{
return token.ToObject<List<T>>();
}
return new List<T> { token.ToObject<T>() };
}
public override bool CanWrite
{
get { return false; }
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
这将允许您正确地反序列化Json
样本输出
添加转换器以检查是否返回单个0,并将其添加到列表中,然后返回所有其他内容的默认值。
[JsonConverter(typeof(SingleOrArrayConverter<int>))]
[JsonProperty( PropertyName = "monitors" )]
public List<int> Monitors { get; set; }