我花了很多时间在如何使用Json.Net为数组项(而不是数组自身)应用CustomCreationConverter。
我尝试了JsonArrayAttribute
,但不适用于物业。
由于
[AttributeUsage(AttributeTargets.Class |
AttributeTargets.Interface, AllowMultiple = false)]
public sealed class JsonArrayAttribute : JsonContainerAttribute
{
...
}
我的代码如下,我想从json文档中反序列化AadlObjectPropertySchema对象:
public class AadlObjectPropertySchema : AadlPropertySchema
{
// JsonArrayAttribute is not applicable to a property!!
// [JsonArray(ItemConverterType = typeof(AadlPropertySchemaConverter))]
public List<AadlPropertySchema> Properties { get; set; } = new List<AadlPropertySchema>();
}
// https://stackoverflow.com/questions/8030538/how-to-implement-custom-jsonconverter-in-json-net-to-deserialize-a-list-of-base
public class AadlPropertySchemaConverter : CustomCreationConverter<AadlPropertySchema>
{
...
public AadlPropertySchema Create(Type objectType, JObject jObject)
{
var _kind = (AadlPropertyTypeEnum)Enum.Parse(typeof(AadlPropertyTypeEnum),
(string)jObject.Property("type"));
switch (_kind)
{
case AadlPropertyTypeEnum.array:
return new AadlArrayPropertySchema();
case AadlPropertyTypeEnum.@object:
return new AadlObjectPropertySchema();
default:
return new AadlPropertySchema();
}
}
...
}