我得到了一个 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);