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