gpt4 book ai didi

c# - WCF - 不要序列化(发出)空集合

转载 作者:太空宇宙 更新时间:2023-11-03 13:28:08 26 4
gpt4 key购买 nike

我们正在实现客户端/服务器应用程序。数据在整个 LAN 中发送。其中 LAN 表示具有多个站点/位置的公司网络。

我们正在使用 WCF 和 NetTcpBinding(编辑:VS2010 .net 4.0)。

我知道 Microsoft 不推荐 [DataMember(EmitDefaultValue = false)]。但如上所述,数据可能会从一个站点发送到另一个站点。因此:尺寸真的很重要!

不发送默认值在大多数情况下都可以正常工作。我对任何类型的收藏都有疑问。我不想传输空集合!

所以我通常会得到相同类型的成员(一个用于工作,一个工作网络)并且我需要实现方法 OnSerializing 和 OnDeserialized。

[DataMember(EmitDefaultValue = false)]
private List<someType> data = new List<someType>();

[NonSerialized]
private List<someType> network = new List<someType>();

[OnDeserialized]
private void OnDeserialized(StreamingContext c)
{
if (network == null)
data = new List<someType>();
else
data = network;
}

[OnSerializing]
private void OnSerializing(StreamingContext c)
{
if (data.Count > 0)
network = data;
else
network = null;
}

有什么优雅的方法可以做到这一点吗?

或者甚至是完全不同的方法?

备注:为简单起见,我不关心可能的多线程问题。

最佳答案

But as mentionend above, data might be sent from one site to another. Therfore: size really matters!

您真的认为在 LAN 中使用 NetTcpBinding 时几个字节会有很大的不同吗?您是否进行了负载测试以证明这一点。

I know that [DataMember(EmitDefaultValue = false)] is not recommended by Microsoft

不推荐使用,因为它不可互操作。此建议不适用于您的情况,因为您在 NetTcpBinding 上只有 WCF 客户端/服务器。配置已经不支持互操作(通过 java 或 php)。

自 .net 4.5 起,WCF 二进制编码器(在 NetTcpBinding 中未使用)支持 Gzip/Deflate 压缩。使用此功能,您将获得比删除空集合更多的字节数。阅读更多 here .

关于c# - WCF - 不要序列化(发出)空集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21603006/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com