[英]C# Xml Serializable enum type
我想用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
您的问题是您使用的是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 在这里摆弄。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.