xml序列化最佳实践

本文关键字:最佳 序列化 xml | 更新日期: 2023-09-27 18:25:13

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

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#中序列化对象,一种更简单、更现代、更易于使用的方法?

xml序列化最佳实践

首先,我建议在代码中使用"using"块。(样本代码)

如果我的理解是可以的,那么您正在寻找一种快速的方法来构建您将在反序列化/序列化操作中使用的模型类。

每个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);
}