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.
我想加载 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.