如何将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可以做您想要的。


推荐阅读

    linux下读取文件命令?

    linux下读取文件命令?,系统,工作,地址,数字,图片,信息,网络,命令,文件,一致,l

    linux设置命令行长度?

    linux设置命令行长度?,系统,工作,信息,地址,命令,工具,异常,管理,目录,文件,l

    linux设置代替命令?

    linux设置代替命令?,系统,地址,网络,工作,软件,工具,服务,信息,命令,别名,lin

    linux命令设置时区?

    linux命令设置时区?,时间,系统,国家,大陆,命令,时区,时钟,日期,指令,时分,lin

    linux设置命令限制?

    linux设置命令限制?,数字,情况,信息,管理,系统,最新,在线,设备,第一,发行,Lin

    linux设置日志命令行?

    linux设置日志命令行?,异常,系统,实时,日志,管理,信息,对比,项目,名称,情况,L

    linux命令行设置网卡?

    linux命令行设置网卡?,系统,地址,信息,网络,工具,电脑,工作,名称,设备,网卡,l

    linux命令优先级设置?

    linux命令优先级设置?,系统,时间,实时,策略,优先级,分时,管理,周期性,进程,

    linux设置ip命令?

    linux设置ip命令?,地址,系统,密码,设备,命令,服务,工具,网络,网卡,计算机,在L

    linux设置命令是什么?

    linux设置命令是什么?,系统,工作,信息,名称,地址,命令,在线,基础,标准,工具,l

    linux命令设置密码?

    linux命令设置密码?,密码,系统,服务,软件,地址,电脑,流程,管理,用户,命令,问

    linux反序列化命令?

    linux反序列化命令?,状态,数据,情况,环境,网络,适当,下来,接口,对象,序列,序

    linux设置编码命令?

    linux设置编码命令?,系统,数据,发展,文件,字符集,命令,数据库,以下,终端,大

    linux命令行设置语言?

    linux命令行设置语言?,系统,管理,环境,国家,工具,电脑,软件,文化,底部,语言,l

    linux设置壁纸的命令?

    linux设置壁纸的命令?,图片,系统,电脑,照片,位置,终端,颜色,字体,单击,壁纸,

    linux恢复命令行设置?

    linux恢复命令行设置?,系统,工作,密码,信息,工具,地址,电脑,命令,情况,地方,

    linux读取命令行参数?

    linux读取命令行参数?,系统,信息,数据,名称,软件,位置,标准,灵活,百度,资料,L

    linux命令提示设置?

    linux命令提示设置?,系统,工作,地址,信息,命令,软件,目录,管理,变量,文件,Lin

    linux设置命令ip?

    linux设置命令ip?,地址,系统,代码,命令,密码,网卡,终端,计算机,测试,网关,lin

    linux设置man命令?

    linux设置man命令?,信息,系统,工具,工作,地址,命令,基础,地方,基本知识,技术