如何获取JsonConverter的Class <t>类型?

时间:2019-01-29 08:20:02

标签: c# generics json.net

我有一个名为 Foo 的类,如下例所示。此类的 Content 属性是 通用列表类型 。我想检查Content属性是否有一项或多项。但是我收到一个错误,因为“ 属性参数不能使用类型参数”。我正在等待您的帮助。在此先感谢。

[DataContract]
public class Foo<T> where T : class
{
    [JsonConverter(typeof(SingleOrMany<T>))]
    public List<T> Content { get; set; }
}

public class SingleOrMany<T> : JsonConverter
{
    public override bool CanConvert(System.Type objectType)
    {
        throw new NotImplementedException();
    }

    public override object ReadJson(JsonReader reader, System.Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}

我的问题与以下示例不同。这里的T用于通用列表。

[JsonConverter(typeof(ConcreteTypeConverter<List<T>>))]

1 个答案:

答案 0 :(得分:1)

您的课程甚至没有使用T。只需将其删除。您可以从传入的参数中获取类型信息(例如objectType)。

一旦T被删除,您就可以将typeof(SingleOrMany)传递给属性而不会出现问题。

[DataContract]
public class Foo<T> where T : class
{
    [JsonConverter(typeof(SingleOrMany))]
    public List<T> Content { get; set; }
}

public class SingleOrMany : JsonConverter
{
    public override bool CanConvert(System.Type objectType)
    {
        throw new NotImplementedException();
    }

    public override object ReadJson(JsonReader reader, System.Type objectType, object existingValue, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }
}