可以将WCF配置为在序列化消息上“重构”XMLSchema实例名称空间吗?

时间:2012-08-22 15:39:49

标签: wcf datacontractserializer

我们注意到,在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元素上重复?

1 个答案:

答案 0 :(得分:2)

您无法调整序列化程序,但是如果您实施message inspector,则可以操纵您的内容。

如果你想完全删除空值,并且永远不会看到它是否存在你可以装饰它

[DataMember(EmitDefaultValue=false)]