如何将XML映射到C#对象

如何将XML映射到C#对象,c#,xml,serialization,xml-serialization,C#,Xml,Serialization,Xml Serialization,我有一个XML,我想加载到对象中,操作这些对象(设置值、读取值),然后将这些XML保存回去。 在我创建的结构(xsd)中包含XML对我来说很重要 一种方法是编写我自己的序列化程序,但是否有内置的对它的支持或C#中的开源,我可以使用 我敢打赌NetDataContractSerializer可以做你想做的事。如果你使用的是.net 3.5,它会非常强大,可能对你也有用 使用visual studio随附的xsd.exe命令行程序创建可在项目/解决方案中使用的类文件,并使用System.Xml.Se

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


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

我敢打赌NetDataContractSerializer可以做你想做的事。

如果你使用的是.net 3.5,它会非常强大,可能对你也有用

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

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

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

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

使用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类

这段代码(C#DotNet 1.0以后)可以很好地将大多数对象序列化为XML。(和后面) 它不适用于包含ArrayList的对象,如果可能,请坚持只使用数组

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

来自Microsoft的xsd.exe有很多错误:|
试试这个开源的pearl

我们已经创建了一个框架,可以用XML自动生成C#类。它是一个可视化的项模板,您可以将XML传递到该模板,并且在项目中自动生成类。使用这些类,您可以创建/读取/写入XML


检查框架和Visual C#项模板的链接:

我同意xsd确实是垃圾。。。但他们制作了另一个几乎无人知晓的版本。它被称为xsd对象生成器。它是下一个版本,有更多的选择。它从XSD生成文件,工作非常出色。如果您有一个模式生成器,比如XMLSpy;从xml创建xsd并使用此工具。我使用这个工具创建了非常复杂的类。 然后为额外的属性\方法等创建分部类,然后在更新模式时只需重新生成类,任何编辑都会保留在分部类中


Handy例程,但请注意,它对没有无参数构造函数的对象不起作用。我们是否需要在类TypeToDeserialize及其成员上编写任何类型的映射标记???这有助于我们在JSON.NET JSON和保存到数据库的XML之间进行转换。JSON.NET没有创建可以使用自身重新映射回JSON的XML,也就是说,我们从未找到一种方法将其生成的XML与ASP.NET的XML方法一起使用。它真的像问题中所述那样映射到c#吗?不,Linq to XML不能用于映射到持久类。[+1]值得注意的是,在使用XSD时,还应该使用/c生成类,或者使用/d生成数据集派生的类。否则,您将收到以下错误消息“错误:只能生成一个类或数据集”。+1感谢您的帮助。它实际上是一个活跃的项目,并且有一些文档。