我有使用 wcf 的项目。目前它使用 NetDataContractSerializer。我想迁移到 protobuf-net。我的服务有以下合同:
interface IRemotingServer
{
[OperationContract]
TypeConfig GetTypeConfig(string typename);
[OperationContract]
object ExecuteMethod(InstanceIdentifier instance, string methodName, object[] parameters);
[OperationContract]
object ExecuteGenericMethod(InstanceIdentifier instance, string methodName, object[] parameters, string[] genericTypes, string returnType);
[OperationContract]
object GetRemoteProperty(InstanceIdentifier instance, string propertyName);
[OperationContract]
void SetRemoteProperty(InstanceIdentifier instance, string propertyName, object value);
[OperationContract]
ObjectDataPacket GetObject(InstanceIdentifier instance);
[OperationContract]
bool Connect();
[OperationContract]
bool Disconnect();
}
一切顺利,直到我尝试调用我的合同的 GetRemoteProperty 方法,该方法的返回类型是对象。使用我发现的服务器跟踪,该服务器因以下消息而崩溃
尝试序列化参数http://www.mersoft.am/Remoting:GetRemotePropertyResult时出错。InnerException 消息是 'Type 'Mersoft.Remoting.InstanceIdentifier[]' 与数据合同名称 'ArrayOfInstanceIdentifier:Mersoft.Remoting' 不是预期的。考虑使用 DataContractResolver 或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给 DataContractSerializer 的已知类型列表中。有关更多详细信息,请参阅 InnerException。
那么,我该如何解决呢?