我是新來的這個站點,所以原諒我的新手。使用XMLSerializer將屬性添加到XML節點
我的工作在C#中做一個大的系統上,我並沒有找到一種方法做的正是我要在下面的情況。
我有一個包含一些像這樣的XML:
<XmlObject>
<Info />
<Objects>
<Component>
<FileData>C:\Folder\file.ext</FileData>
<Component>
</Objects>
</XmlObject>
而且我的目標是得到這樣的:
<XmlObject>
<Info />
<Objects>
<Component>
<FileData Extension=".ext">C:\Folder\file.ext</FileData>
<Component>
</Objects>
</XmlObject>
但這裏是我的約束:
的XML文件使用XmlSerializer創建,標籤下的所有對象都是通過反射創建的,因此我無法在FileData上添加[XmlElementAttribute]等標籤。
目前我們使用的XmlAttributeOverrides添加由反射XmlSerializer的返回類型。我的問題是我對XmlAttributeOverrides不太瞭解,而且我找不到在這裏添加此NodeAttribute的方法。
另外,Extension的值是元素值的實際擴展。例如:
<FileData Extension=".ext">C:\Folder\file.ext</FileData>
<FileData Extension=".png">C:\Folder\file.png</FileData>
非常感謝大家幫我找到這個或者讓我解決這個問題。
編輯:上週,我發現了另一種方式來使這項工作。我沒有使用XmlAttributeOverrides,而是創建了一個新類,它在XML中序列化時可以作爲簡單的字符串使用,但使用包含屬性的XML標記。當應用程序執行反射時,我會檢測應該如此輸出的成員,而不是發出IL,因此它可以用作字符串,我發出IL以便它可以像我的新類一樣使用。
不過因爲我知道更多關於XmlAttributeOverrides很感興趣,我不會關閉的問題,我敢肯定有些人會教我有用的知識在這個問題上。
如果一些你想要的例子我已經爲自己的文化做了,只是讓我知道,我會盡力出來的創造,因爲我的工作了代碼的例子是的一個屬性我爲之工作的公司。
所以一個'FileData'是沒有一個XmlSerializer序列化? – 2011-03-10 21:10:19
當你說它是通過反射創建的,你的意思是發射IL?或者只是檢查分配給屬性的對象的類型和值? – Tejs 2011-03-10 21:35:58
@奧斯汀:是的FileData是與一個XmlSerializer序列化。一切都是。 – 2011-03-14 14:59:57