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

时间:2011-09-14 11:48:34

标签: c# xml-serialization linq-to-xml xelement xml-deserialization

我有以下类和数据成员(以及不相关的方法)我是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经验使我失望。

2 个答案:

答案 0 :(得分:3)

我认为你可能想要使用XmlSerializer,'对XML文档进行序列化和反序列化对象'?

请参阅How to serialize an object to XML by using Visual C#了解示例代码。

答案 1 :(得分:1)

[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);