2008-09-17 191 views
28

我有一个XML,我想要加载到对象,操作这些对象(设置值,读取值),然后将这些XML保存回来。 对于我来说,在我创建的结构(xsd)中使用XML非常重要。如何将XML映射到C#对象

要做到这一点的一种方法是编写我自己的序列化程序,但是有没有内置的支持它或C#中的开放源代码,我可以使用?

回答

28

可以使用XSD.EXE生成一个架构(XSD)序列化的C#类:

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

如果架构具有依赖性(包括/进口模式),它们都必须包含在相同的命令行。

+11

[+1]值得注意的是,在使用XSD时,您还应该使用/ c生成类或/ d以生成DataSet派生类。否则,您将收到以下错误消息“错误:只能生成一个类或数据集。”。 – Marc 2010-12-06 10:30:50

0

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

7

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

+2

这是现在LINQ官方页面XSD:http://linqtoxsd.codeplex.com/ – 2009-06-29 19:45:52

+0

是否真的做映射到C#作为问题陈述? – Konstantin 2009-12-16 14:07:58

+0

nah,Linq To XML不能用于映射到持久化类。 – 2010-05-12 07:55:05

2

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

2

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

xsd file.xsd {/ classes |/datased} [/ language:language] [/ namespace:namespace] [/ outputdir:directory] ​​[URI:uri] 这将把你的xsd文件和创建c#或vb.net类其中。

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

18

此代码(C#1.0 DOTNET的起)相当大部分的对象序列化到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); 
} 
1

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

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

1

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

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