Azure service fabric ProtoBuf-Azure服务结构

Azure service fabric ProtoBuf-Azure服务结构,azure-service-fabric,protobuf-net,service-fabric-stateful,protobuf-csharp-port,Azure Service Fabric,Protobuf Net,Service Fabric Stateful,Protobuf Csharp Port,我正在考虑替换ASF中RPC的默认序列化程序。这涉及到实现几个接口,其中一个接口在通过RPC通信的服务之间传递 public interface IServiceRemotingResponseMessageBody { void Set(object response); object Get(Type paramType); } 由于实现需要是可序列化的,显而易见的ProtoBuf实现如下 [ProtoContract] public class

我正在考虑替换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.Object

这里有解决办法吗?Object没有约定,但是OOTB
DataContract
序列化程序也可以,但它们没有被模式化,这在使用时会造成版本控制方面的麻烦。我尝试过使用公共基类型,但值可以是
IEnumerable
T

有人能帮忙吗? 谢谢
KH

目前,protobuf net对
对象
没有很好的支持,除了通过一些混乱的黑客攻击。最简单的尝试(只是看看它是否适用于您的场景)是在proto成员属性上找到“dynamictypes”标志并将其设置为true。这种特定于库的黑客将一些类型元数据烧录到数据中,以允许它处理未知类型,但这还远远不够完美


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

嘿,Marc,非常感谢您的回复。实际上,我已经尝试过了,并收到了一个错误
“动态类型不是契约类型:列表'1'
@KnowHoper是的,列表和单个对象之间有一些非常关键的区别。即使在proto3术语中,这也是
重复任意
可选任意
之间的重要区别;我没有任何简单的解决办法。我可以让
List
使用动态类型特性,但这很简单,我今天不能提供给您。如果您可以取消选中数据并切换到
列表
,可能会有所帮助,但我还没有检查!好的,马克,非常感谢你的回答。我还有其他一些途径要探索。祝你一切顺利。@knowhopper你有什么解决办法吗?