0

我得到了一个 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,
}

当我序列化一个使用这个枚举值的类时,例如 Item1,我得到了预期的行为并且元素看起来像:

<MyType> </MyType>

问题是当我尝试使用 XmlSerializer 的 Deserialize 方法反序列化 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);
            }
        }
    }

该方法是这样调用的:

var result = Deserialize<MyType>(content);
4

0 回答 0