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#中序列化对象,一种更简单、更现代、更易于使用的方法?
首先,我建议在代码中使用"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);
}