TypeConverter с перечислением в C # .Net 472, WCF - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть enum, который передается как строковый аргумент в URL. Вместо того, чтобы писать имя перечисления, я хочу, чтобы у каждого перечисления было свое имя. Пример желаемого рабочего процесса:

public  class CurrencyTypeConverter : TypeConverter
{
    public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
    {
        //...
    }

    public override bool CanConvertTo(ITypeDescriptorContext context, Type destinationType)
    {
        //...
    }

    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        //...
    }

    public override object ConvertTo(ITypeDescriptorContext context, CultureInfo culture, object value, Type destinationType)
    {
        //...
    }
}

[TypeConverter(typeof(CurrencyTypeConverter))]
public enum CurrencyType
{
    Eth,
    Bitcoin
}

// WCF Service interface
[OperationContract]
[WebGet(ResponseFormat = WebMessageFormat.Json, UriTemplate = "GetLatestBlock?currencyType={currencyType}")]
Task<LatestBlockResponse> GetLatestBlock(CurrencyType currencyType);

Поэтому я хочу назвать конечную точку примерно так: http://<...>/GetLatestBlock?currencyType=BTC (а не полное имя перечисления currencyType=Bitcoin). Однако это не работает. Созданный мной TypeConverter отбрасывается WCF.

Я пробовал массив перестановок, например, украшал члены enum атрибутом [Description], помечая enum как [Serializable], читая тонны онлайн-уроков. Кажется, ничего не работает.

Я также должен отметить, что использование [DataContract], [DataMember] и [EnumMember] не является опцией, поскольку это перечисление объявлено внутри проекта netstandard2.0. (Если я что-то не понимаю, кажется, что эти атрибуты сериализации не вариант).

Итак - ПОМОГИТЕ? :) (Надеюсь, что кто-то там испытал ту же проблему)

...