C#Xml可序列化的枚举类型

时间:2018-10-09 12:23:24

标签: c# xml xml-serialization xmlserializer

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

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

我想将其加载到这样的类中:

[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

1 个答案:

答案 0 :(得分:1)

您的问题是您使用的是StringReader而不是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小提琴here

相关问题