如何从XML(文件)反序列化某个类,反之亦然
本文关键字:反之亦然 反序列化 XML 文件 | 更新日期: 2023-09-27 18:08:28
我有以下类和数据成员(加上不相关的方法)我是XML和。net的新用户(尽管这个借口已经过时了),并且花了几天时间阅读MSDN条目(以及谷歌出现的任何内容),首先是XMLReader,然后是XMLDocument,现在是XDocument, XElement和XNode,但没有接近序列化我的类的具体解决方案(也许我需要更深入地研究。net中的序列化)。为了让我开始,我在XML文件中有一些数据,我想读取(尽管它可能是错误的格式),以初始化类来初始化我的应用程序。配置类如下:
class IWantToFile
{
class DirsAndFiles
{
public List<string> Suffixes;
public string Dir;
}
enum OPOptsEnum
{
op1Description, op2Description, op3Description, op4Description,
op5Description, op6Description, op7Description, op8Description,
};
List<DirsAndFiles> ProjectDirs;
bool[] OPOpts = new bool[(int)OPOptsEnum.op8Description + 1];
bool otherOpt;
}
观察其中的一对一和一对多关系(例如List<DirsAndFiles> ProjectDirs
),有人能给出简洁的方法来读取和写入此数据到文件吗?它将极大地帮助我在这些领域的发展。
我已经做到了:
if (File.Exists(SPECFILENAME)) {
XDocument xdoc = XDocument.Load(SPECFILENAME);
//Ummm.....
}
但是我缺乏。net XML和Linq经验使我失败
我想你可能想使用XmlSerializer,它'序列化和反序列化对象到XML文档'?
参见如何使用Visual c#将对象序列化为XML作为示例代码。
[Serializable]
public class MyObject
{
public string SerializeMe { get; set; }
[XmlIgnore]
public string DONTSerializeMe { get; set; }
}
辅助……
public static class SerializerHelper<T>
{
public static string Serialize(T myobject)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
StringWriter stringWriter = new StringWriter();
xmlSerializer.Serialize(stringWriter, myobject);
string xml = stringWriter.ToString();
return xml;
}
public static T Deserialize(string xml)
{
XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
StringReader stringReader = new StringReader(xml);
return (T)xmlSerializer.Deserialize(stringReader);
}
}
使用MyObject myObject = new MyObject();
string xml = SerializerHelper<MyObject>.Serialize(myObject);
MyObject DeserializedObject = SerializerHelper<MyObject>.Deserialize(xml);