重复的已知类型 - WCF异常

时间:2014-01-20 12:26:13

标签: .net vb.net wcf

我有以下课程:

Public Class ClassA

    Private mMyVar  As List( Of ClassB )
    <DataMember (Name:="key")> _
    Public Property MyVar  As List( Of ClassB)
        Get
            Return mMyVar  
        End Get
        Set(value As List( Of ClassB))
            mMyVar  = value
            RaisePropertyChanged( "MyVar" )
        End Set
    End Property

...

Public Class ClassB

    Private mMyVar  As List( Of IClassC )
    <DataMember (Name:="key2")> _
    Public Property MyVar  As List( Of IClassC)
        Get
            Return mMyVar  
        End Get
        Set(value As List( Of IClassC))
            mMyVar  = value
            RaisePropertyChanged( "MyVar" )
        End Set
    End Property

...

最后,IClassC可以是几个可能的实际类之一。

我收到以下WCF错误:

  

mscorlib.dll中出现'System.ServiceModel.CommunicationException'类型的第一次机会异常

     

其他信息:尝试序列化参数baseEntity时出错.TurteException消息是'Type'ClassC2',数据协定名称为...不是预期的。考虑使用DataContractResolver或将任何静态未知的类型添加到已知类型列表中 - 例如,通过使用KnownTypeAttribute属性或将它们添加到传递给DataContractSerializer的已知类型列表中。有关详细信息,请参阅InnerException。

我可以通过向ClassA添加以下装饰来轻松解决此问题:

<DataContract(Name:= "..." , Namespace:=...), KnownType (GetType (ClassC1)), KnownType (GetType (ClassC2))>

(如果我添加IClassC则没有区别。)

这修复了ClassC1,但对于classC2,我得到错误:

  

mscorlib.dll中出现'System.InvalidOperationException'类型的第一次机会异常

     

附加信息:类型'ClassC2'无法添加到已知类型列表中,因为已存在具有相同数据协定名称“...”的其他类型“ClassC1”。如果存在特定类型的不同集合(例如,List和Test []),则不能将它们都添加为已知类型。请考虑仅指定其中一种类型以添加​​到已知类型列表中。

该消息暗示只能添加一个接口的已知类型。有没有解决方法,或者我需要以XML或其他方式传递集合吗?

0 个答案:

没有答案