wcf - 能否将 WCF 配置为 'refactor' 序列化消息上的 XMLSchema 实例命名空间?

标签 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 元素上重复?

最佳答案

你不能调整序列化器,但是如果你实现一个 message inspector你可以随心所欲地操纵。

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

[DataMember(EmitDefaultValue=false)]

关于wcf - 能否将 WCF 配置为 'refactor' 序列化消息上的 XMLSchema 实例命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12076708/

相关文章:

c# - 将参数添加到 WCF .svc 文件

c# - WCF 代理使用

wcf - 数据契约(Contract)和数据成员

c# - DataContractSerializer 不调用我的构造函数?

c# - 数据契约(Contract)序列化器可以用于任何第三方网络服务吗

c# - 将身份验证移至服务

wcf - 如何将http header 添加到WCF channel 中

c# - 如何在数据契约(Contract) WCF 中使用枚举

c# - 数据契约序列化不适用于所有元素

c# - 通过序列化 DataContract 将对象字段分离到两个文件中