2

次のクラスのWCFサービスでのシリアル化にprotobuf-netを使用しています。

[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