作为从WCF迁移到gRPC的一部分,我正在处理NetDataContractSerializer,它用于在客户端序列化对象,在服务器端进行反序列化。客户端和服务器与通信中使用的类型共享相同的DLL。
作为客户端应用程序更新过程的一部分,从服务器下载具有新/更改/删除通信对象定义的共享DLL的实际版本。用于更新过程的基本通信对象从未更改过。因此,在更新工作期间序列化/反序列化。
我希望尽可能少地重写现有代码。我发现我可以将NetDataContractSerializer替换为Newtonsoft的Json.NET序列化,如下所述:如何将JSON反序列化为正确类型的对象,而不必事先定义该类型?和https://www.newtonsoft.com/json/help/html/SerializeTypeNameHandling.htm。
但我想知道:
发布于 2020-08-14 08:37:27
在"3“上,gRPC实际上对您交换序列化程序非常开放;您不一定要使用protobuf,但是gRPC通常与protobuf一起使用。事实上,您实际上可以使用NetDataContractSerializer,尽管出于某些原因,我不会推荐它。
这方面的“如何”很难解释,因为在gRPC中,人们经常使用protoc来生成所有绑定,这隐藏了所有的细节(并将您与protobuf联系起来)。
您可能会对protobuf-net.Grpc感兴趣,它是绑定到gRPC的另一种方式(使用Google或Microsoft传输--只是绑定不同),而且与WCF相比要好得多。事实上,它甚至允许您借用WCF的接口/属性方法,尽管它没有提供与WCF类似的特性奇偶(从根本上说,它仍然是gRPC!)。
一个入门指南在这里。开头行设置上下文:
那是什么? .NET核心3+和.NET Framework 4.6.1+中的简单WCF访问--想想WCF,但通过gRPC
它默认为protobuf-net,它是为代码优先场景设计的另一种protobuf序列化程序,但是您可以替换序列化程序(全局的,或者针对单个类型)。实现自定义序列化程序绑定的一个示例是在此提供 --请注意,该文件的大多数是一个大型注释(实际序列化程序代码的末尾为8行)。请阅读这些评论:它们在名义上是关于BinaryFormatter的,但它们中的每一个字都同样适用于NetDataContractSerializer。
我知道你说过“不需要引用第三方DLL”--在这种情况下,我的意思是:你可以花几个星期的时间来复制最直接显而易见的东西。that是为你做的,但是.如果NuGet包只是坐在那里准备使用,那么这听起来并不是很好地利用了您的时间。相关的API可以很容易地与Google/Microsoft软件包一起使用,但是在使所有东西一起工作的过程中需要大量的管道。
https://stackoverflow.com/questions/63409248
复制相似问题