我有一個類,包含列表屬性,在列表中包含有一個枚舉屬性的對象。在.NET Xml序列化中,是否可以使用基於屬性值的具有不同標記的枚舉屬性對類進行序列化?
當我序列化此,它看起來像這樣:
<?xml version="1.0" encoding="ibm850"?>
<test>
<events>
<test-event type="changing" />
<test-event type="changed" />
</events>
</test>
是否可以通過屬性或類似,以獲取XML的樣子嗎?
<?xml version="1.0" encoding="ibm850"?>
<test>
<events>
<changing />
<changed />
</events>
</test>
基本上,使用枚舉的屬性值作爲一種方式來確定標籤名?使用類層次結構(即創建子類而不是使用屬性值)是唯一的方法嗎?
編輯:經過測試,似乎即使是一個類層次結構也不會實際工作。如果有一種方法來構造類以獲得我想要的輸出,即使是使用子類,也是可以接受的答案。
下面是一個示例程序,將輸出上面的XML(記得按Ctrl + F5在Visual Studio中運行,否則程序窗口會立即關閉):
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
namespace ConsoleApplication18
{
public enum TestEventTypes
{
[XmlEnum("changing")]
Changing,
[XmlEnum("changed")]
Changed
}
[XmlType("test-event")]
public class TestEvent
{
[XmlAttribute("type")]
public TestEventTypes Type { get; set; }
}
[XmlType("test")]
public class Test
{
private List<TestEvent> _Events = new List<TestEvent>();
[XmlArray("events")]
public List<TestEvent> Events { get { return _Events; } }
}
class Program
{
static void Main(string[] args)
{
Test test = new Test();
test.Events.Add(new TestEvent { Type = TestEventTypes.Changing });
test.Events.Add(new TestEvent { Type = TestEventTypes.Changed });
XmlSerializer serializer = new XmlSerializer(typeof(Test));
XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
ns.Add("", "");
serializer.Serialize(Console.Out, test, ns);
}
}
}