28

我有一个想要加载到对象的 XML,操作这些对象(设置值、读取值),然后将这些 XML 保存回来。在我创建的结构 (xsd) 中包含 XML 对我来说很重要。

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

4

9 回答 9

28

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

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

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

于 2008-09-17T21:03:24.187 回答
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);
}
于 2008-09-17T21:45:27.957 回答
7

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

于 2008-09-17T21:02:47.090 回答
2

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

于 2008-09-17T21:03:00.977 回答
2

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

xsd 文件.xsd {/类 | /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

于 2008-09-17T21:07:33.007 回答
1

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

于 2011-04-18T07:26:48.830 回答
1

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

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

于 2011-09-13T10:21:46.973 回答
1

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

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

于 2012-01-19T22:11:20.163 回答
0

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

于 2008-09-17T21:02:19.247 回答