2015-06-04 33 views
2

有沒有辦法將對象轉換爲XML,但每個元素都包含一個屬性(讓我們像這樣xt:type =「int」)。
我知道我可以手動使用反射和迭代屬性和....
我在問是否有一種方法可以使用預製圖書館或其他東西來生成它。
我現在正在做的是:如何將對象轉換爲強類型的XML

XmlDocument doc = new XmlDocument(); 
XmlSerializer ser = new XmlSerializer(document.GetType()); 
string result = string.Empty; 
using (MemoryStream memStm = new MemoryStream()) 
{ 
    ser.Serialize(memStm, document); 
    memStm.Position = 0; 
    result = new StreamReader(memStm).ReadToEnd(); 
} 

因爲後來我需要讀回的對象。 所有這一切,我想以編程方式做,而不是使用XSD工具。

感謝

更新1:
我想看起來是這樣的:

<note> 
    <propertyName1 xs:type="string">value1</to> 
    <propertyName2 xs:type="int">10</to> 
    <propertyName2 xs:type="datetime">04-06-2015 01:10:00</to> 
</note> 

最重要的是屬性XS:類型

+1

使用'XmlSerialization'。 –

+0

我按照您看到的「XmlSerializer」使用,但是如何在xml元素中編寫type屬性。 – Dabbas

+0

讓我知道如果這有助於:https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlelementattribute.type(v = vs.110).aspx –

回答

1

如果你使用System.XML.Linq,你可以添加任何你想要的XAttribute。

比方說你有一個Personn P與字符串名稱和INT年齡

XElement e = new XElement("Personne"); 
XElement age = new XElement("Age",Personne.Age); 
age.add(new XAttribute("xs:type", typeOf(Personne.Age))); 
e.Add(age); 
XElement name = new XElement("Name",Personne.Name); 
name.add(new XAttribute("xs:type", typeOf(Personne.Name))); 
e.Add(name);` 

您將收到的XML:

<Personne> 
<Age type="int">(the age of the personne)</age> 
<Name type="string">(he name of the personne)</Name> 
<Personne> 

與 「自動化」 的過程:

XElement p = new XElement("Personne"); 

foreach(var property in Personn.GetType().GetProperties()) { 
XElement e = new XElement(prop.Name, prop.GetValue(P, null)); 
e.Add(new XAttribute("xs:type", typeOf(Personne.prop))); 
p.Add(e); 
} 

EDITED:在需要的時候添加「xs:」

+0

所以我需要手動完成,這個過程沒有自動化 – Dabbas

+0

那麼假設你可以遍歷一個對象的所有屬性: 請參閱http://stackoverflow.com/questions/737151/how獲取該類屬性的列表 因此,您沒有手動執行該操作,是否希望我編輯上述示例以使其通過此過程「自動化」? –

+0

這是一個很深的遍歷對象,所以這並不容易,我認爲這是手動:) 任何方式謝謝 – Dabbas