如何将XML映射到C#对象

如何将XML映射到C#对象

How do I map XML to C# objects

我有一个XML,我希望将其加载到对象,操纵这些对象(设置值,读取值),然后将这些XML保存回去。
对于我来说,在创建的结构(xsd)中使用XML至关重要。

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


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

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

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


此代码(从C#DotNet 1.0开始)可以很好地将大多数对象序列化为XML。 (然后回来)
它不适用于包含ArrayLists的对象,并且在可能的情况下坚持仅使用Arrays

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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也可能对您有用!


使用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/zh-cn/library/x6c1kb0s(VS.71).aspx


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


我同意xsd确实很烂...但是他们制作了另一个几乎没人知道的版本。它称为xsd对象生成器。它的下一个版本,还有更多选择。它从XSD生成文件,并且运行出色。如果您有像XML spy这样的模式生成器;从您的xml创建一个xsd并使用此工具。我使用此工具创建了非常非常复杂的类。
然后为额外的属性方法等创建部分类,然后在更新架构时,只需重新生成类,所有编辑都会保留在部分类中。

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


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

检查此链接以获取框架和Visual C#项目模板:单击此处


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


我敢打赌NetDataContractSerializer可以做您想要的。


推荐阅读