C# 为什么XMLSerializer使用基类的DefaultValue属性进行序列化

C# 为什么XMLSerializer使用基类的DefaultValue属性进行序列化,c#,xml-serialization,overriding,default-value,derived-class,C#,Xml Serialization,Overriding,Default Value,Derived Class,虽然第一次序列化与我预期的一样(默认值的非序列化): 第二个结果是: <?xml version="1.0" encoding="utf-8" ?> <Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" /> 20 显然,XmlSerializer接受基类的默认值,而不是新值。使用“覆盖”覆盖虚拟财产

虽然第一次序列化与我预期的一样(默认值的非序列化):


第二个结果是:

<?xml version="1.0" encoding="utf-8" ?> 
  <Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" /> 

20
显然,XmlSerializer接受基类的默认值,而不是新值。使用“覆盖”覆盖虚拟财产会得到相同的结果。 如果将ExData属性A的初始化更改为10,则不会像应用基类属性的默认值那样序列化此属性。 有人能向我解释一下这种行为吗? 有人知道这方面的工作吗


我的目标是非序列化默认值,但更改派生类的默认值。

XmlSerializer似乎只获得第一个
DefaultValueAttribute
,不幸的是,我认为没有直接的解决方法来满足您的需要。但是,您可以实现
IXmlSerializable
并自己做这类事情。

不是一个好的选择。特别是因为这个bug是独立于类的,而IXMLSerializable实现则不是。是否可以在不重写所有内容的情况下重写XMLSerializer?
<?xml version="1.0" encoding="utf-8" ?> 
  <Data xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" /> 
<?xml version="1.0" encoding="utf-8"?>
<ExData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <A>20</A>
</ExData>