使用XmlEnumAttribute对XML反序列化枚举值Name =“”

时间:2013-10-15 12:30:17

标签: c# xml serialization enums xmlserializer

我获得了一个XML模式,并使用xsd.exe从中生成类。其中一个clase是enum类型,如下所示:

/// <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,
}

当我将使用此枚举的类序列化为值时,例如Item1,我得到预期的行为,元素看起来像:

<MyType> </MyType>

问题是当我尝试使用XmlSerializer的Deserialize方法反序列化XML时。该方法不会抛出任何异常,但枚举值不是 Item1 ,而是测试

任何帮助我怎么能让这个工作?最好不修改生成的代码吗?

由于

更新:

用于反序列化的代码:

    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);
            }
        }
    }

这个方法的调用如下:

var result = Deserialize<MyType>(content);

0 个答案:

没有答案