是的,正如Cheeso在評論中指出的,你可以用做XmlAttributeOverrides
XmlAttributes overrideAttributes = new XmlAttributes();
overrideAttributes.XmlRoot = new XmlRootAttribute("Testing");
XmlAttributeOverrides overrides = new XmlAttributeOverrides();
overrides.Add(typeof(string[]), overrideAttributes);
XmlSerializer serialise = new XmlSerializer(typeof(string[]), overrides);
using (MemoryStream stream = new MemoryStream())
{
serialise.Serialize(stream, new string[] { Guid.NewGuid().ToString(), Guid.NewGuid().ToString() });
}
輸出:
<?xml version="1.0"?>
<Testing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<string>37d47837-62d0-46dc-9747-709b91bdac6e</string>
<string>9cd904a9-f86f-46c1-a2aa-49c44bc3c654</string>
</Testing>
Xml序列(大約)工作的基礎上,即:
- 被序列化的對象決定如何對其內容進行序列化(包括根元素的屬性)
- 但是,調用者負責創建根元素(並在反序列化中使用它)。
你可以看到這個不同於IXmlSerializable
接口的工作方式 - 被序列化對象可以使用XmlRootAttribute
屬性作爲建議向根元素應該是什麼樣子的調用者,但最終還是要由調用者創建根元素(通常由XmlSerializer
類處理)。
您可能可以在您的類上定義靜態變量「ElementName」,然後執行'[XmlElement(MyClass.ElementName)]'。我沒有發佈這個作爲答案,因爲我不知道它會正常工作。 – 2011-05-15 21:34:09
您無法在運行時指定屬性參數。 – SLaks 2011-05-15 21:38:52
您可以在運行時使用XmlAttributeOverrides http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlattributeoverrides.aspx,但前提是您要控制XmlSerializer的使用。如果您使用隱式序列化的自定義類型 - 例如WCF,它將不起作用。如果您發佈更多的場景,我可以提供一些更好的見解,看它是否適合您。 – Cheeso 2011-05-15 21:39:16