I spent much time on how to apply a CustomCreationConverter for array item (not the array self) with Json.Net.
I tried JsonArrayAttribute
, but it's not applicable to a property.
Since
[AttributeUsage(AttributeTargets.Class |
AttributeTargets.Interface, AllowMultiple = false)]
public sealed class JsonArrayAttribute : JsonContainerAttribute
{
...
}
My code is as follows, and I want to deserialize a AadlObjectPropertySchema object from a json document:
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();
}
}
...
}