【发布时间】:2020-12-04 03:12:53
【问题描述】:
作为从 WCF 迁移到 gRPC 的一部分,我正在处理 NetDataContractSerializer,它用于在客户端序列化对象并在服务器端反序列化。客户端和服务器都使用通信中使用的类型共享相同的 DLL。
作为客户端应用程序更新过程的一部分,从服务器下载具有新/更改/删除的通信对象定义的共享 DLL 的实际版本。用于更新过程的基本通信对象永远不会改变。所以更新期间的序列化/反序列化工作。
我想尽可能少地重写现有代码。我发现我可以用 Newtonsoft 的 Json.NET 序列化替换 NetDataContractSerializer,如下所述:
How to deserialize JSON to objects of the correct type, without having to define the type before hand? 和这里 https://www.newtonsoft.com/json/help/html/SerializeTypeNameHandling.htm。
但我想知道:
- 一般来说有没有更好的解决方案?
- 是否有一些解决方案基于 .NET Framework 4.8 的一部分,并且也可以在 .NET 5.0 中运行,而无需引用第三方 DLL?
- 是否有一些二进制序列化替代方案对消息大小更友好/更快?我不必以可读的形式发送消息。
【问题讨论】:
-
有关将 WCF 解决方案迁移到 gRPC 的信息,您可以参考此链接:docs.microsoft.com/en-us/dotnet/architecture/…
-
对于与 WCF 的 NetDataContractSerializer 相同的序列化体验,您可以使用 github.com/neuecc/MessagePack-CSharp 或提到的 NewtonsoftJSON(但您必须处理 int/float/guid 反序列化问题)。 MessagePack 2.2.85 版本允许通过无类型序列化器使用默认设置序列化/反序列化接口实现类,而不会抛出异常。
标签: c# wcf json.net grpc netdatacontractserializer