我们注意到,在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元素上重复?
答案 0 :(得分:2)
您无法调整序列化程序,但是如果您实施message inspector,则可以操纵您的内容。
如果你想完全删除空值,并且永远不会看到它是否存在你可以装饰它
[DataMember(EmitDefaultValue=false)]