如何将XML映射到C#对象

时间:2020-03-05 19:00:02  来源:igfitidea点击:

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

一种方法是编写自己的序列化器,但是我可以使用它的内置支持还是C语言中的开源?

解决方案

回答

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

回答

如果我们使用的是.net 3.5,则LINQ to XML非常强大,LINQ to XSD也可能对我们有用!

回答

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

回答

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

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文件并从中创建cor vb.net类。

http://msdn.microsoft.com/zh-CN/library/x6c1kb0s(VS.71).aspx

回答

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