相关疑难解决方法(0)

通过其描述属性查找枚举值

这可能看起来有点颠倒,但我想要做的是通过其Description属性从枚举中获取枚举值.

所以,如果我有一个枚举声明如下:

enum Testing
{
    [Description("David Gouge")]
    Dave = 1,
    [Description("Peter Gouge")]
    Pete = 2,
    [Description("Marie Gouge")]
    Ree = 3
}
Run Code Online (Sandbox Code Playgroud)

我希望能够通过提供字符串"Peter Gouge"来获得2.

作为起点,我可以遍历枚举字段并使用正确的属性获取字段:

string descriptionToMatch = "Peter Gouge";
FieldInfo[] fields = typeof(Testing).GetFields();

foreach (FieldInfo field in fields)
{
    if (field.GetCustomAttributes(typeof(DescriptionAttribute), false).Count() > 0)
    {
        if (((DescriptionAttribute)field.GetCustomAttributes(typeof(DescriptionAttribute), false)[0]).Description == descriptionToMatch)
        {

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是那时候我仍然坚持在内心做什么.也不确定这是否是第一个出路.

c# reflection

27
推荐指数
2
解决办法
2万
查看次数

无法使用Json.NET正确转换为json的枚举

我有一个枚举:

public enum Animal 
{ 
    Dog, 
    Cat, 
    BlackBear 
}
Run Code Online (Sandbox Code Playgroud)

我需要将它发送给第三方API.此API要求我发送的枚举值为小写,有时需要下划线.通常,它们所需的名称与我使用的枚举命名约定不匹配.

使用https://gooddevbaddev.wordpress.com/2013/08/26/deserializing-c-enums-using-json-net/上提供的示例,我尝试使用自定义JsonConverter:

public class AnimalConverter : JsonConverter {
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {
        var animal = (Animal)value;
        switch (animal)
        {
            case Animal.Dog:
            {
                writer.WriteValue("dog");
                break;
            }
            case Animal.Cat:
            {
                writer.WriteValue("cat");
                break;
            }
            case Animal.BlackBear:
            {
                writer.WriteValue("black_bear");
                break;
            }
        }
    }
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {
        var enumString = (string)reader.Value;
        Animal? animal = null;
        switch (enumString)
        {
            case …
Run Code Online (Sandbox Code Playgroud)

c# json.net

21
推荐指数
1
解决办法
2万
查看次数

标签 统计

c# ×2

json.net ×1

reflection ×1