希望有人可以帮助我解决我尝试使用 Newtonsoft.Json 反序列化的大型 JSON 文件中出现的以下不一致问题。
对象的属性之一有时会显示为:
"roles": [
{
"field1" : "value",
"field2" : "value"
}
]
而其他时候,相同的属性显示为:
"roles": {
"roles": [
{
"field1" : "value",
"field2" : "value"
}
]
}
作为参考,该属性在其类中实现为:
[JsonProperty("roles")]
public List<Role> Roles { get; set; }
我需要发生的是,每当发生上述第二种情况时,对象内容都会像第一种情况一样被反序列化。即“外部”对象被丢弃/忽略
当单独的属性有时作为对象出现,有时作为数组出现时,我在其类定义中使用以下方法,成功地处理了此文件中的另一个不一致问题:
[JsonConverter(typeof(SingleValueArrayConverter<Address>))]
public List<Address> Location { get; set; }
并实施为:
public class SingleValueArrayConverter<T> : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
object retVal = new Object();
if (reader.TokenType == JsonToken.StartObject)
{
T instance = (T)serializer.Deserialize(reader, typeof(T));
retVal = new List<T>() { instance };
}
else if (reader.TokenType == JsonToken.StartArray)
{
retVal = serializer.Deserialize(reader, objectType);
}
return retVal;
}
public override bool CanConvert(Type objectType)
{
return true;
}
}
但是,我无法解决这个问题。
有人可以帮忙吗?