如何从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经验使我失败

如何从XML(文件)反序列化某个类,反之亦然

我想你可能想使用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);