【发布时间】:2017-05-15 00:05:49
【问题描述】:
我目前正在使用协议缓冲区(版本 3 C#)。 我正在向不同的服务来回发送消息。 并且目前正在尝试将存储在某些消息中的一些数据保存到数据库中(实际上可以是任何类型的)。
问题在于 byte[] 被创建为类型 ByteString 而 List 被创建为 RepeatedField。 现在我遇到的问题是我没有设法 100% 成功地序列化或反序列化它们。
Basic types 的作用就像一个魅力,但 Protocol Buffers 自己的类型可能是一个挑战。
我尝试了 AutoMapper 并创建了使 ByteString 可以序列化/反序列化的映射,但 RepeatedField 很难,因为它是只读的并且有一个私有设置器并且不能在构造函数中设置。
我无法让 AutoMapper 正确映射到它,如果在此过程中遇到更多麻烦并想知道是否有更简单的方法将消息保存在数据库中,我不会感到惊讶?
我已经阅读了旧版本的 protobuf,其中(如果我没记错的话)有所谓的构建器,您可以访问每个消息的属性,这些属性是可变的,并且会使序列化/反序列化变得更加容易。或者是否有更明显的方式来访问数据并将其存储在我只是没有看到的数据库中?
我了解消息不可变的原因,但真的没有直接的方法可以将包含的数据保存到数据库吗? 感觉是一个重要的功能。
PS:我知道有一个 protobuf-net 解决方案可以处理序列化/反序列化,但它只支持 protobuf v.2,而且我非常依赖 v.3 功能,例如 Any。
【问题讨论】:
标签: c# serialization mapping protocol-buffers