如何将 XML 映射到 C# 对象
-
01-07-2019 - |
题
我有一个 XML,想要加载到对象、操作这些对象(设置值、读取值),然后将这些 XML 保存回来。对我来说,将 XML 包含在我创建的结构 (xsd) 中非常重要。
一种方法是编写自己的序列化器,但是是否有对其的内置支持或 C# 中的开源可供我使用?
解决方案
您可以使用 xsd.exe 从架构 (xsd) 生成可序列化的 C# 类:
xsd.exe dependency1.xsd dependency2.xsd schema.xsd /out:outputDir
如果模式具有依赖项(包含/导入的模式),则它们必须全部包含在同一命令行中。
其他提示
此代码(C# DotNet 1.0 及以上版本)可以很好地将大多数对象序列化为 XML。(返回)它不适用于包含阵列清单的对象,如果可能的话,请仅使用数组
using System;
using System.IO;
using System.Text;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
public static string Serialize(object objectToSerialize)
{
MemoryStream mem = new MemoryStream();
XmlSerializer ser = new XmlSerializer(objectToSerialize.GetType());
ser.Serialize(mem, objectToSerialize);
ASCIIEncoding ascii = new ASCIIEncoding();
return ascii.GetString(mem.ToArray());
}
public static object Deserialize(Type typeToDeserialize, string xmlString)
{
byte[] bytes = Encoding.UTF8.GetBytes(xmlString);
MemoryStream mem = new MemoryStream(bytes);
XmlSerializer ser = new XmlSerializer(typeToDeserialize);
return ser.Deserialize(mem);
}
LINQ 到 XML 如果您使用 .net 3.5,它会非常强大, LINQ 到 XSD 可能对你也有用!
使用 Visual Studio 附带的 xsd.exe 命令行程序创建可在项目/解决方案中使用的类文件,并使用 System.Xml.Serialization 命名空间(特别是 XmlSerializer 类)来序列化/反序列化这些类磁盘。
使用 System.Xml.Serialization;如果您想将 xml 映射到任何随机对象,此命名空间具有您需要的所有属性。或者,您可以使用 xsd.exe 工具
xsd file.xsd {/class | /dataSet} [/element:element] [/language:language] [/namespace:namespace] [/outputdir:Directdir] [uri:uri],它将拿走您的XSD文件并创建C#或VB.NET类。
http://msdn.microsoft.com/en-us/library/x6c1kb0s(VS.71).aspx
我同意xsd确实很垃圾......但他们制作了另一个几乎没有人知道的版本。它称为 xsd 对象生成器。它是下一个版本,并且有更多选项。它从 XSD 生成文件并且工作得非常好。如果您有像 XML间谍这样的模式生成器;从您的 xml 创建一个 xsd 并使用此工具。我使用这个工具创建了非常非常复杂的类。然后为额外的属性\方法等创建部分类,然后当您更新架构时,您只需重新生成您的类,并且任何编辑都会保留在您的部分类中。
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=7075
Microsoft的XSD.EXE有很多错误:|尝试此开源珍珠 http://xsd2code.codeplex.com/
我们创建了一个框架,可以从 XML 自动生成 C# 类。它是一个可视化项模板,您可以将 XML 传递到其中,并且类会在您的项目中自动生成。使用这些类,您可以创建/读取/写入 XML。
检查此链接以获取框架和 Visual C# 项模板: 点击这里
我敢打赌 NetDataContractSerializer 可以做你想做的事。