像這樣:
XmlAttributeOverrides or = new XmlAttributeOverrides();
or.Add(typeof(ChannelConfiguration), new XmlAttributes
{
XmlType = new XmlTypeAttribute("Channel")
});
var xmlSerializer = new XmlSerializer(typeof(List<ChannelConfiguration>), or,
Type.EmptyTypes, new XmlRootAttribute("Channels"), "");
xmlSerializer.Serialize(Console.Out,
new List<ChannelConfiguration> { new ChannelConfiguration { } });
注意你必須緩存和重新使用該串行器實例。我也強烈建議你使用「包裝類」方法 - 更簡單,沒有組裝泄漏的風險,而且IIRC可以在更多的平臺上工作(很確定我已經看到了上述情況在某些實現方面行爲不同 - SL或WP7或類似的)。
如果你有訪問類型ChannelConfiguration
,你也可以只使用:
[XmlType("Channel")]
public class ChannelConfiguration
{...}
var xmlSerializer = new XmlSerializer(typeof(List<ChannelConfiguration>),
new XmlRootAttribute("Channels"));
xmlSerializer.Serialize(Console.Out,
new List<ChannelConfiguration> { new ChannelConfiguration { } });
爲什麼你不想做簡單的選擇?出於好奇? (注意:使用非平凡的構造函數意味着你必須**緩存序列化程序,否則你會泄漏程序集;基本的'XmlSerializer(Type)'構造函數不會遭受這個) –
你是ChannelConfiguration類的所有者嗎?你可以用屬性裝飾它?如果是,我可能有一個解決方案。 –
@MarcGravell,也許你是對的,我應該用包裝 – SiberianGuy