如何将XML映射到C#对象
我有一个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); }