XmlEnumAttribute到Enum解析

时间:2017-11-03 14:34:03

标签: c# reflection enums

我的enum类看起来像这样:

public enum StupidEnum
    {

        /// <remarks/>
        [System.Xml.Serialization.XmlEnumAttribute("01")]
        Item01,

        /// <remarks/>
        [System.Xml.Serialization.XmlEnumAttribute("01_1")]
        Item01_1,

        /// <remarks/>
        [System.Xml.Serialization.XmlEnumAttribute("01_11")]
        Item01_11,
}

现在我想通过仅给出01_11值来获得Item01_11枚举对象。 换句话说,我有来自Xml Enum Attribute的值,因此我需要返回枚举对象。

1 个答案:

答案 0 :(得分:1)

我已经成功实现了它,但它并不是一个非常优雅的解决方案。由于您的属性依赖于XML序列化,因此您需要以这种方式阅读它。我将发布工作代码以及我推荐的方式。

var testString = "01_1";
var xml = new XmlSerializer(typeof(StupidEnum));
// XmlSerializer expects XML so wrap what you got in xml tags.
using(var ms = new MemoryStream(Encoding.ASCII.GetBytes($"<StupidEnum>{testString}</StupidEnum>")))
    var item = (StupidEnum)xml.Deserialize(ms);
    Console.WriteLine(item);
}

或者,您可以将enum转换为整数类型并存储该数字,然后在读取时使用枚举自身的能力来回转到enum,而不是依赖于xml序列化值如下:

var testString = "Item01_1";  
// you can also just get the 01_1 and concatenate it to "Item" when parsing in the next line
var value = Enum.Parse(typeof(StupidEnum), testString);
Console.WriteLine(value);