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>