我正在考虑替换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 在这里也可以,但这些都没有进行模式化,这会在使用可靠集合时创建版本控制问题。我尝试过使用公共基础类型,但Value可以是IEnumerable<T>
或T
等。
有人能帮忙吗? 谢谢, KH
List<T>
工作,但这将是微不足道的,并且我今天无法为您提供此服务。如果您可以拆分数据并切换到List<object>
,那可能会有所帮助-但我还没有检查过! - Marc Gravell