我想用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
答案 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。