默认是否XmlSerializer
能够将类属性序列化为 Xml 属性?
[MyClassTypeAttribute(ClassType.MyClass)]
public MyClass : BaseClass {
}
会转向
<myclass MyClassType="MyClass">
原因:
我有一个 WCF 服务,它通过同一个操作合同向我发送不同的对象,这些合同都派生自BaseClass
. 要知道它是哪种类型的对象并将其直接转换(并将其序列化为 Xml 以在之后写入文档),我想要一些“类型”属性(enum
)。
当然,一种可能性是将属性声明为XmlAttribute
[XmlAttribute(params)]
public MyClassType { get; set; }
这里的问题是:(XmlSerializer
以及DataContractSerializer
,AFAIK)迫使我setter
在每个属性上都有一个。我知道我可以声明setter
asprotected
并且它仍然有效(XmlSerializer
,你这个顽皮的小东西),但我不太喜欢那个解决方案,因为 1)我认为我通常可以在 POCO 中省略 setter 并且2) 将一些属性声明为 asXmlAttributes
和另一些属性为 asXmlElements
令人困惑(这就像将狗和猫放入cat goulash中一样。
(此外,是否可以强制派生类声明某些属性?)
[abstract MyClassTypeAttribute]