對於當前的項目,我試圖讓一個通用的XML
創建者使用XmlSerializer
類 - 我需要某個類中的某個元素根據類型設置ElementName
創作者在這個上下文中足夠簡單的類。這裏有一個例子:來自通用類中的T的XML元素名稱
public abstract class ElementTypeBase
{
public abstract string ElementName { get; }
}
public class ElementTypeA : ElementTypeBase
{
public override string ElementName
{
get { return "ElementA"; }
}
}
然後它傳遞給將被用於XmlSerializer
我XML
對象類,但我想ElementName
具體到類型。
public class XMLObject<T> where T : ElementTypeBase
{
[XmlElement(Activator.CreateInstance<T>().ElementName)]
public string SomeElement;
}
我想我能做到這一點,但得到:
的屬性參數必須是常量表達式的typeof屬性參數類型的表達 或數組創建表達式
所以我認爲我可以override ToString()
但這不起作用,我想使用常量,但它感覺很髒。還有其他建議嗎?
這聽起來像一個奇怪的方法。爲什麼使用'XmlSerializer'註解,如果XML結構是動態的呢? – millimoose
@millimoose這是需要動態構建的整個主機結構中的一個元素,我可以爲每種不同類型創建一個類,但嘗試使其儘可能通用。 編輯:當我說我的意思是strucutre不需要是動態的這個XML,但對於一個elemenet它確實需要是因爲該單個元素可以有不同的屬性,顯然將需要一個不同的元素名稱 - 休息仍然是一樣的(不知道我已經解釋得如何...) – LukeHennerley
該文檔提到你可以重寫['IXmlSerializable'](http://msdn.microsoft.com/en-us/library/system。 xml.serialization.ixmlserializable.aspx)自定義XML序列化,在ElementTypeBase上這樣做似乎是實現你想要的簡單方法。 – millimoose