2

我们在以下类上使用 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'."}

如何解决这个问题?

提前致谢。

4

0 回答 0