我正在寻找替换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
这里有解决方法吗? System.Object没有契约,但OOTB DataContract
序列化程序可以MessagePack here,但这些不是模式化的,这会在使用reliable collections时产生版本控制问题。我尝试使用公共基本类型,但值可以是IEnumerable<T>
或T
等。
有人可以帮忙吗? 谢谢, KH
答案 0 :(得分:3)
目前,protobuf-net对object
没有很好的支持,除非是通过一些混乱的黑客攻击。最简单的尝试(只是为了查看它是否适用于您的场景)是在该proto-member属性上找到“dynamic types”标志并将其设置为true。这个特定于库的黑客将某些类型的元数据刻录到数据中,以允许它与未知类型一起工作,但它远非完美。
这里的“更好”解决方法将让我找到时间来实现“任何”功能(相对于最近,在proto3 IIRC时添加到Google库中)。这大致类似,但将以跨库方式实现。