2008-09-17 192 views
28

我有一個XML,我想要加載到對象,操作這些對象(設置值,讀取值),然後將這些XML保存回來。 對於我來說,在我創建的結構(xsd)中使用XML非常重要。如何將XML映射到C#對象

要做到這一點的一種方法是編寫我自己的序列化程序,但是有沒有內置的支持它或C#中的開放源代碼,我可以使用?

回答

28

可以使用XSD.EXE生成一個架構(XSD)序列化的C#類:

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

如果架構具有依賴性(包括/進口模式),它們都必須包含在相同的命令行。

+11

[+1]值得注意的是,在使用XSD時,您還應該使用/ c生成類或/ d以生成DataSet派生類。否則,您將收到以下錯誤消息「錯誤:只能生成一個類或數據集。」。 – Marc 2010-12-06 10:30:50

0

我打賭NetDataContractSerializer可以做你想做的。

7

LINQ to XML功能非常強大,如果您使用.net 3.5,LINQ to XSD也許對您有用!

+2

這是現在LINQ官方頁面XSD:http://linqtoxsd.codeplex.com/ – 2009-06-29 19:45:52

+0

是否真的做映射到C#作爲問題陳述? – Konstantin 2009-12-16 14:07:58

+0

nah,Linq To XML不能用於映射到持久化類。 – 2010-05-12 07:55:05

2

使用Visual Studio附帶的xsd.exe命令行程序創建可在項目/解決方案中使用的類文件,並使用System.Xml.Serialization命名空間(特別是XmlSerializer類)對這些文件進行序列化/反序列化類和磁盤。

2

using System.Xml.Serialization; 如果您想將xml映射到任何隨機對象,則此命名空間具有您需要的所有屬性。或者,您可以使用xsd.exe工具

xsd file.xsd {/ classes |/datased} [/ language:language] [/ namespace:namespace] [/ outputdir:directory] ​​[URI:uri] 這將把你的xsd文件和創建c#或vb.net類其中。

http://msdn.microsoft.com/en-us/library/x6c1kb0s(VS.71).aspx

18

此代碼(C#1.0 DOTNET的起)相當大部分的對象序列化到XML。 (反面) 它不包含的ArrayList對象的工作,如果可能的話堅持只使用陣列

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); 
} 
1

我們已經創建了一個框架,可以從你的XML中自動生成C#類。它是您將XML傳遞到的可視化項目模板,並且在您的項目中自動生成類。使用這些類可以創建/讀取/寫入您的XML。

檢查該鏈接的框架和Visual C#項目模板:click here

1

我同意XSD真是廢話...但他們提出,幾乎沒有人知道另一個版本。它被稱爲xsd對象生成器。它的下一個版本,並有更多的選擇。它從XSD生成文件並且效果很棒。如果您有像XML Spy這樣的模式生成器;從你的xml創建一個xsd並使用這個工具。我使用這個工具創建了非常非常複雜的類。 然後爲額外的屬性\方法等創建部分類,然後當你更新你的模式時,你只需重新生成你的類,任何編輯都會保留在你的部分類中。

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