首页 > 解决方案 > 如何使用 Json.Net 为数组项应用 CustomCreationConverter

问题描述

我花了很多时间研究如何使用 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();
        }
    }
    ...
}

标签: c#json.net

解决方案


推荐阅读