C# XML反序列化XmlEnumAttribute名称为“的枚举值”&引用;

C# XML反序列化XmlEnumAttribute名称为“的枚举值”&引用;,c#,xml,serialization,enums,xmlserializer,C#,Xml,Serialization,Enums,Xmlserializer,我得到了一个XML模式,并使用xsd.exe从中生成类。其中一个类别是如下所示的枚举类型: /// <remarks/> [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")] [System.SerializableAttribute()] public enum MyType { /// <remarks/> [System.Xml.Serializatio

我得到了一个XML模式,并使用xsd.exe从中生成类。其中一个类别是如下所示的枚举类型:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
public enum MyType
{

    /// <remarks/>
    [System.Xml.Serialization.XmlEnumAttribute("+Test")]
    Test,

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

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

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

    /// <remarks/>
    [System.Xml.Serialization.XmlEnumAttribute("    ")]
    Item3,
}
var result = Deserialize<MyType>(content);
//
[System.CodeDom.Compiler.GeneratedCodeAttribute(“xsd”,“4.0.30319.17929”)]
[System.SerializableAttribute()]
公共枚举MyType
{
/// 
[System.Xml.Serialization.XmlEnumAttribute(“+Test”)]
测试,
/// 
[System.Xml.Serialization.XmlEnumAttribute(“”)
项目,,
/// 
[System.Xml.Serialization.XmlEnumAttribute(“”)
项目1,
/// 
[System.Xml.Serialization.XmlEnumAttribute(“”)
项目2,
/// 
[System.Xml.Serialization.XmlEnumAttribute(“”)
项目3,
}
当我用值(例如Item1)序列化使用此枚举的类时,我会得到预期的行为,元素如下所示:

<MyType> </MyType>

问题是当我尝试使用XmlSerializer的反序列化方法反序列化XML时。该方法不会引发任何异常,但枚举值不是预期的Item1,而是Test

有什么可以帮我的吗?最好不修改生成的代码

谢谢

更新:

用于反序列化的代码:

    public static T Deserialize<T>(string xml, Type[] extraTypes = null)
    {
        if (string.IsNullOrEmpty(xml))
        {
            return default(T);
        }

        XmlSerializer serializer = new XmlSerializer(typeof(T), extraTypes);
        XmlReaderSettings settings = new XmlReaderSettings();
        using (StringReader textReader = new StringReader(xml))
        {
            using (XmlReader xmlReader = XmlReader.Create(textReader, settings))
            {
                return (T)serializer.Deserialize(xmlReader);
            }
        }
    }
公共静态T反序列化(字符串xml,类型[]extraTypes=null) { if(string.IsNullOrEmpty(xml)) { 返回默认值(T); } XmlSerializer serializer=新的XmlSerializer(typeof(T),extraTypes); XmlReaderSettings设置=新建XmlReaderSettings(); 使用(StringReader文本阅读器=新的StringReader(xml)) { 使用(XmlReader=XmlReader.Create(textReader,设置)) { 返回(T)序列化程序。反序列化(xmlReader); } } } 该方法的调用方式如下:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.0.30319.17929")]
[System.SerializableAttribute()]
public enum MyType
{

    /// <remarks/>
    [System.Xml.Serialization.XmlEnumAttribute("+Test")]
    Test,

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

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

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

    /// <remarks/>
    [System.Xml.Serialization.XmlEnumAttribute("    ")]
    Item3,
}
var result = Deserialize<MyType>(content);
var result=反序列化(内容);

你能发布反序列化代码吗?@RajeshSubramanian问题已用反序列化代码更新它可能是在直接返回对象时使用默认值。请尝试使用Enum.Parsereturning@RajeshSubramanian这里的Enum.Parse是不允许的,因为它没有考虑XmlEnumAttribute,因此正在处理诸如“Test”或“Item”之类的值,但在解析诸如“”或“+Test”之类的值时抛出异常,这正是我需要解析的。当然,我可以使用反射来获取XmlEnumAttribute及其Name属性的值,并像这样解析值,我只是认为这样的东西应该通过反序列化过程直接工作。