如何将XML映射到C#对象

时间:2008-09-17 21:00:32

标签: c# xml serialization xml-serialization

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

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

9 个答案:

答案 0 :(得分:28)

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

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

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

答案 1 :(得分:18)

此代码(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);
}

答案 2 :(得分:7)

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

答案 3 :(得分:2)

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

答案 4 :(得分:2)

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

答案 5 :(得分:1)

来自Microsoft的xsd.exe有很多错误:| 试试这个开源珍珠http://xsd2code.codeplex.com/

答案 6 :(得分:1)

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

检查框架和Visual C#项目模板的此链接:click here

答案 7 :(得分:1)

我同意xsd确实很糟糕......但他们制作的另一个版本几乎没有人知道。它叫做xsd对象生成器。它的下一个版本,并有更多的选择。它从XSD生成文件,效果很棒。如果你有一个类似XML spy的模式生成器;从您的xml创建一个xsd并使用此工具。我使用这个工具创建了非常复杂的类。 然后为额外的属性\方法等创建部分类,然后当您更新模式时,您只需重新生成类,并且任何编辑都会在您的部分类中保留。

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=7075

答案 8 :(得分:0)

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