C# Xml 可序列化枚举类型

C# Xml Serializable enum type

我想加载 XML 序列化的 XML 文件。现在的类型应该是枚举类型。 所以 XML 看起来像这样:

<Ressource name="ressource_name"  type= "Integer" >
                ...
</Ressource>

我想像这样将它加载到 class 中:

[Serializable]
public enum Res_Type
{
    [XmlEnum(Name = "Integer")]
    Integer,
    [XmlEnum(Name = "Decimal")]
    Decimal,
    [XmlEnum(Name = "Text")]
    Text
}

public class Ressource
{
   [XmlAttribute]
   public string name { set; get; }
   [XmlAttribute]
   public Res_Type type { get; set; }
}

当我搜索这个主题时,我只找到不同的解决方法,然后我需要它。我需要如上所示的 XML,但我不知道如何将信息加载为枚举类型。


更新: 为了测试序列化和反序列化,我使用了这段代码:

Ressource res = new Ressource();
res.name = "ressource_name";
res.type = Res_Type.Integer;

XmlSerializer serializer = new XmlSerializer(res.GetType());
using (StreamWriter writer = new StreamWriter(@"h:\test.xml"))
{
    serializer.Serialize(writer, res);
}
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Ressource));
StringReader stringReader = new StringReader(@"h:\test.xml");
res = (Ressource)xmlSerializer.Deserialize(stringReader);

我收到错误:InvalidOperationException

您的问题是您使用的是 StringReader rather than a StreamReader:

StringReader stringReader = new StringReader(@"h:\test.xml");

这意味着您的代码正在尝试反序列化字符串文字 @"h:\test.xml" 本身 的 内容,而不是它所引用的文件。这当然会失败,因为字符串 h:\test.xml 甚至不是格式正确的 XML.

你应该这样做:

var fileName = @"h:\test.xml";

// Write the file as before

using (var reader = new StreamReader(fileName))
{
    res = (Ressource)xmlSerializer.Deserialize(reader);
}

工作.Net fiddle here.