-1

我一直在使用以下代码序列化内容的传统方式

private void SaveToXml(IdentifiableEntity IE)
{
    try
    {
        XmlSerializer serializer = new XmlSerializer(IE.GetType());
        TextWriter textWriter = new StreamWriter(IE.FilePath);
        serializer.Serialize(textWriter, IE);
        textWriter.Close();
    }
    catch (Exception e )
    {
        Console.WriteLine("erreur : "+ e);
    }
}

private T LoadFromXml<T>(string path)
{           
    XmlSerializer deserializer = new XmlSerializer(typeof(T));
    TextReader textReader = new StreamReader(path);

    T entity = (T)deserializer.Deserialize(textReader);
    textReader.Close();

    return entity;            
}

尽管这种方法可以解决问题,但我发现我的所有属性都必须是公共的,这有点烦人,有时我需要标记属性 [XmlAttribute|XmlElement| XmlIgnore] 并且它不处理字典。

我的问题是:有没有更好的方法在 c# 中序列化对象,一种更简单、更现代、更易于使用的方法?

4

1 回答 1

0

首先,我建议在您的代码中使用“使用”块。(示例代码)

如果我的理解没问题,您正在寻找一种快速的方法来构建您将在反序列化/序列化操作期间使用的模型类。

每个 Xml 文件都是不同的,我不知道任何通用的方法来序列化/反序列化它们。在某一时刻,您必须知道是否会有一个属性或元素,或者任何元素是否可以为空等。

假设您已经有一个包含几行的示例 XML 文件,它可以让您大致了解它的外观

我建议使用 xsd(奇迹工具)

xsd yourXMLFileName.xml
xsd yourXMLFileName.xsd \classes

这个工具每次都会为你想要使用它的 XML 文件生成模型类。

比你容易序列化和反序列化

反序列化(假设您将获得一个名为 XXXX 的类,代表 xml 中的根节点)

XmlSerializer ser = new XmlSerializer(typeof(XXXX));
XXXX yourVariable;
using (XmlReader reader = XmlReader.Create(@"C:\yyyyyy\yyyyyy\YourXmlFile.xml"))
{
   yourVariable= (XXXX) ser.Deserialize(reader);
}

序列化

var serializer = new XmlSerializer(typeof(XXXX));

using(var writer = new StreamWriter(@"C:\yyyyyy\yyyyyy\YourXmlFile.xml"))
{
    serializer.Serialize(writer, yourVariable);
}
于 2013-07-27T16:05:53.040 回答