Kno*_*per 5 protobuf-net protobuf-csharp-port azure-service-fabric service-fabric-stateful
我正在寻找替换ASF中RPC的默认序列化器。这涉及实现一些接口,其中一个接口在通过RPC进行通信的服务之间传递
public interface IServiceRemotingResponseMessageBody
{
void Set(object response);
object Get(Type paramType);
}
Run Code Online (Sandbox Code Playgroud)
由于实现需要可序列化,因此显而易见的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;
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这失败了
没有为类型定义序列化器:System.Object
这里有解决方法吗?System.Object的没有合同,但开箱即用的DataContract串行器可以,如可以MessagePack 这里,但这些都不是系统化它可以创建时的版本头痛可靠的集合。我试过使用常见的基本类型,但Value可以是IEnumerable<T>或T等。
有人可以帮忙吗?谢谢,KH
目前,protobuf-net 没有对 的良好支持object,除非通过一些混乱的 hack。最简单的尝试(只是为了看看它是否适合您的场景)是找到该 proto-member 属性上的“动态类型”标志并将其设置为 true。这种特定于库的黑客将一些类型元数据刻录到数据中,以使其能够处理未知类型,但它远非完美。
这里的“更好”修复需要我找到时间来实现“任何”功能(最近添加到 Google 库,大约在 proto3 IIRC 的时间)。其工作原理大致相似,但将以跨库的方式实现。
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |