我们注意到,在 SOAP 调用期间序列化 null
值时,WCF DataContractSerializer 效率不高。出于审计目的,我们还记录了发送到磁盘的确切消息,因此这会浪费存储空间。具有多个 nil 元素的典型消息是这样发送的:
<MyMessage xmlns="myXmlns">
<field0>1234567</field0>
<field1 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
<field2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
<field3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true" />
// etc
</MyMessage>
对于带宽和磁盘考虑因素而言,无法估量的改进是生成 SOAP 主体,例如:
<MyMessage xmlns="myXmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<field0>1234567</field0>
<field1 xsi:nil="true" />
<field2 xsi:nil="true" />
<field3 xsi:nil="true" />
//etc
</MyMessage>
所以我的问题是,如何更改我的 WCF 客户端以整合根元素上的 XSI 命名空间,以防止它在每个 nil 元素上重复?
最佳答案
你不能调整序列化器,但是如果你实现一个 message inspector你可以随心所欲地操纵。
如果你想完全删除空值,并且永远不会看到它是否不存在,你可以装饰它
[DataMember(EmitDefaultValue=false)]
关于wcf - 能否将 WCF 配置为 'refactor' 序列化消息上的 XMLSchema 实例命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12076708/