我们在以下类上使用 protobuf-net 对 WCF 服务进行序列化。
[DataContract]
[KnownType(typeof(NamedViewModel))]
public class NamedViewModel<TKey> : IViewModel
{
[DataMember]
public virtual TKey Id { get; set; }
[DataMember]
public virtual string Name { get; set; }
}
[DataContract]
[KnownType(typeof(ScheduleTemplateViewModel))]
public class NamedViewModel : NamedViewModel<int>
{
}
[DataContract]
public class ScheduleTemplateViewModel : NamedViewModel
{
[DataMember]
public string Comment { get; set; }
}
我们有一个基本上可以执行的自定义例程(为简洁起见进行了简化)。
type.GetAttributes<KnownTypeAttribute>().Select(a => a.Type).Distinct().ForEach(t => AddKnownTypeHierarchy(t));
public static void AddKnownTypeHierarchy(Type type)
{
ProtoBuf.Meta.MetaType metaType = RuntimeTypeModel.Default.Add(type, true);
...
metaType.AddSubType( ...
...
}
我们在 WCF 服务上收到以下错误。
{"Unable to cast object of type 'Castle.Proxies.NamedViewModel`1Proxy' to type 'Presentation.ViewModels.ScheduleTemplateBuilder.ScheduleTemplateViewModel'."}
如何解决这个问题?
提前致谢。