如何将XML映射到C#对象

我有一个XML,我想加载到对象,操纵这些对象(设置值,读取值),然后保存这些XML。 对我来说,在我创建的结构(xsd)中包含XML非常重要。

一种方法是编写我自己的序列化程序,但它是否内置支持它或C#中的开源我可以使用?

您可以使用xsd.exe从架构(xsd)生成可序列化的C#类:

xsd.exe dependency1.xsd dependency2.xsd schema.xsd /out:outputDir 

如果模式具有依赖项(包含/导入的模式),则它们必须全部包含在同一命令行中。

此代码(C#DotNet 1.0以后)可以很好地将大多数对象序列化为XML。 (和返回)它不适用于包含ArrayLists的对象,如果可能的话,只能使用Arrays

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

如果您使用.net 3.5, LINQ to XML非常强大, LINQ to XSD也可能对您有用!

使用visual studio附带的xsd.exe命令行程序创建可在项目/解决方案中使用的类文件,并使用System.Xml.Serialization命名空间(特别是XmlSerializer类)对这些类进行序列化/反序列化磁盘。

使用System.Xml.Serialization; 如果要将xml映射到任何随机对象,此命名空间具有您需要的所有属性。 或者,您可以使用xsd.exe工具

xsd file.xsd {/ classes | / dataset} [/ element:element] [/ language:language] [/ namespace:namespace] [/ outputdir:directory] ​​[URI:uri]它将获取你的xsd文件并从中创建c#或vb.net类。

http://msdn.microsoft.com/en-us/library/x6c1kb0s(VS.71).aspx

我同意xsd真是废话……但他们制作的另一个版本几乎没有人知道。 它叫做xsd对象生成器。 它的下一个版本,并有更多的选择。 它从XSD生成文件,效果很棒。 如果你有像XML spy这样的模式生成器; 从您的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可以做你想要的。