2011-03-10 102 views
1

我是新來的這個站點,所以原諒我的新手。使用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很感興趣,我不會關閉的問題,我敢肯定有些人會教我有用的知識在這個問題上。

如果一些你想要的例子我已經爲自己的文化做了,只是讓我知道,我會盡力出來的創造,因爲我的工作了代碼的例子是的一個屬性我爲之工作的公司。

+0

所以一個'FileData'是沒有一個XmlSerializer序列化? – 2011-03-10 21:10:19

+0

當你說它是通過反射創建的,你的意思是發射IL?或者只是檢查分配給屬性的對象的類型和值? – Tejs 2011-03-10 21:35:58

+0

@奧斯汀:是的FileData是與一個XmlSerializer序列化。一切都是。 – 2011-03-14 14:59:57

回答

0
+1

就像在問題中所述,我已經使用了一個XmlSerializer。我尋找的答案是XmlAttributeOverrides是否可以提供幫助,如果有,如何實現? – 2011-05-05 13:12:12

+0

並且由於將被序列化的對象是通過反射創建的,所以我不能將像[]這樣的屬性創建爲預期的結果。 – 2011-05-05 13:14:06