我正在尝试处理一个对象,该对象可以是对象数组,也可以只是对象。仅当naic是对象而不是数组时,才可以使用下面的代码。我在做什么错了?
这是我能想到的最短的例子:
[{
"section": "52.219-1.b","naics": [{
"naicsname": "Engineering Services","isPrimary": true,"ExcpCounter": 1,"isSmallBusiness": "Y","naicsCode": 541330
},{
"naicsname": "Military and Aerospace Equipment and Military Weapons","ExcpCounter": 2,"naicsCode": 541330
}
]
},{
"section": "52.219-1.b","naics": {
"naicsname": "Janitorial Services","naicsCode": 561720
}
}
]
我将只有一种类型,但是我在数组中强行将其强制为快速类型。
我的课程是:
[JsonProperty("naics",NullValueHandling = NullValueHandling.Ignore)]
public AnswerNaics Naics { get; set; }
public partial struct AnswerNaics
{
public AnswerNaic Naic;
public AnswerNaic[] NaicArray;
public static implicit operator AnswerNaics(AnswerNaic Naic) => new AnswerNaics { Naic = Naic };
public static implicit operator AnswerNaics(AnswerNaic[] NaicArray) => new AnswerNaics { NaicArray = NaicArray };
}
public partial class AnswerNaic
{
[JsonProperty("naicsname")]
public string Naicsname { get; set; }
[JsonProperty("hasSizeChanged")]
public string HasSizeChanged { get; set; }
[JsonProperty("isPrimary")]
public bool IsPrimary { get; set; }
[JsonProperty("ExcpCounter",NullValueHandling = NullValueHandling.Ignore)]
public long? ExcpCounter { get; set; }
[JsonProperty("isSmallBusiness")]
public string IsSmallBusiness { get; set; }
[JsonProperty("naicsCode")]
public string NaicsCode { get; set; }
}
internal class NaicsConverter : JsonConverter
{
public override bool CanConvert(Type t) => t == typeof(AnswerNaics) || t == typeof(AnswerNaics?);
public override object ReadJson(JsonReader reader,Type t,object existingValue,JsonSerializer serializer)
{
switch (reader.TokenType)
{
case JsonToken.StartObject:
var objectvalue = serializer.Deserialize<AnswerNaic>(reader);
return new AnswerNaics { Naic = objectvalue };
case JsonToken.StartArray:
var arrayValue = serializer.Deserialize<AnswerNaic[]>(reader);
return new AnswerNaics { NaicArray = arrayValue };
}
throw new Exception("Cannot unmarshal type AnswerNaics");
}
public override void WriteJson(JsonWriter writer,object untypedValue,JsonSerializer serializer)
{
var value = (AnswerNaics)untypedValue;
if (value.NaicArray != null)
{
serializer.Serialize(writer,value.NaicArray);
return;
}
if (value.Naic != null)
{
serializer.Serialize(writer,value.Naic);
return;
}
throw new Exception("Cannot marshal type Naics");
}
public static readonly NaicsConverter Singleton = new NaicsConverter();
}
我有更多的对象或数组节点,但我只是想找出一个能够应用于所有对象或数组的节点。