繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM