У меня есть 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. (Если я что-то не понимаю, кажется, что эти атрибуты сериализации не вариант).
Итак - ПОМОГИТЕ? :) (Надеюсь, что кто-то там испытал ту же проблему)