代码之家  ›  专栏  ›  技术社区  ›  KnowHoper

ProtoBuf-Azure服务结构

  •  5
  • KnowHoper  · 技术社区  · 6 年前

    我正在考虑替换ASF中RPC的默认序列化程序。这涉及到实现几个接口,其中一个接口在通过RPC通信的服务之间传递

     public interface IServiceRemotingResponseMessageBody
      {
        void Set(object response);
    
        object Get(Type paramType);
      }
    

    由于实现需要是可序列化的,显而易见的ProtoBuf实现如下

        [ProtoContract]
        public class ProtoBufRemotingResponseBody : IServiceRemotingResponseMessageBody
        {
            [ProtoMember(1)]
            public object Value { get; set; }
    
            public void Set(object response)
            {
                Value = response;
            }
    
            public object Get(Type paramType)
            {
                return Value;
            }
        }
    

    不幸的是

    没有为类型System定义序列化程序。对象

    这里有解决办法吗?系统对象没有约定,但OOTB DataContract 序列化程序can,as can MessagePack here ,但这些都没有计划化,这在使用 reliable collections . 我尝试过使用公共基类型,但值可以是 IEnumerable<T> T

    有人能帮忙吗? 谢谢 KH公司

    1 回复  |  直到 6 年前
        1
  •  4
  •   Marc Gravell    6 年前

    目前,protobuf net对 object ,除了一些乱七八糟的黑客。最简单的尝试(只是看看它是否适用于您的场景)是在proto成员属性上找到“dynamic types”标志并将其设置为true。这种特定于库的黑客将一些类型元数据烧成数据,以允许它处理未知类型,但这还远远不够完美。

    这里的“更好”修复需要我找到时间来实现“any”特性(在proto3 IIRC前后,最近添加到Google库中)。这在很大程度上类似,但将以跨库的方式实现。

    推荐文章