【问题标题】:xml serialisation best practicesxml序列化最佳实践
【发布时间】:2013-07-27 19:14:35
【问题描述】:

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

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

【问题讨论】:

标签: c# xml-serialization xml-deserialization


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-03
    • 2011-02-23
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多