C# XML反序列化XmlEnumAttribute名称为“的枚举值”&引用;
我得到了一个XML模式,并使用xsd.exe从中生成类。其中一个类别是如下所示的枚举类型: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
/// <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属性的值,并像这样解析值,我只是认为这样的东西应该通过反序列化过程直接工作。