WCF Linq到SQL表 - System.Data.Linq.Table无法序列化

时间:2009-12-01 15:47:12

标签: linq wcf linq-to-sql serialization

当我通过似乎有用的演示时,我无法弄清楚这一点。我有一个WCF服务,我试图使用Linq to SQL。但是,我得到的只是错误System.Data.Linq.Table无法序列化。所以我从我自己的课开始思考我可以重新构建它直到得到错误。问题是即使尝试使用空类,我也会收到错误。在我的方法上使用“As System.Linq.Table(Of xxx)”会给我这个错误。

类型'System.Data.Linq.Table`1 [LinqADMRequest2b]'无法序列化。请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员。有关其他受支持的类型,请参阅Microsoft .NET Framework文档。


Imports System.ServiceModel
Imports System.ServiceModel.Activation
Imports System.Runtime.Serialization
Imports System.Collections.Generic
Imports Linq

<ServiceContract(Namespace:="")> _
<ServiceBehavior(IncludeExceptionDetailInFaults:=True)> _
<AspNetCompatibilityRequirements(RequirementsMode:=AspNetCompatibilityRequirementsMode.Allowed)> _
Public Class ComplyTrackWCFService

     _
    Public Function GetTestRequests() As System.Data.Linq.Table(Of LinqADMRequest2b)
        'Dim ct As New Linq2.ComplyTrackDataContext()
        'Dim queryresults = ct.ADMRequests 'ct.ADMRequestGetListByUser("", "155")
        'Return queryresults
    End Function

End Class

<DataContract()> _
<Serializable()> _
Public Class LinqADMRequest2b
    Implements ISerializable

    Private _firstName As String
     _
    Public Property FirstName() As String
        Get
            Return _firstName
        End Get
        Set(ByVal Value As String)
            _firstName = Value
        End Set
    End Property

    Public Sub GetObjectData(ByVal info As System.Runtime.Serialization.SerializationInfo, ByVal context As System.Runtime.Serialization.StreamingContext) Implements System.Runtime.Serialization.ISerializable.GetObjectData

    End Sub

End Class

正如你所看到的,GetTestRequests()没有做任何事情,然后说它会返回一个System.Data.Linq.Table(Of LinqADMRequest2b)

我无法让LinqADMRequest2b序列化。

类型'System.Data.Linq.Table`1 [LinqADMRequest2b]'无法序列化。请考虑使用DataContractAttribute属性对其进行标记,并使用DataMemberAttribute属性标记要序列化的所有成员。有关其他受支持的类型,请参阅Microsoft .NET Framework文档。

2 个答案:

答案 0 :(得分:3)

不要从您的服务返回Table<T>。它是一个复杂的可查询类型,它依赖于它的DataContext而不是内存中的集合。

请返回List<T>,您可以致电Table<T>List<T>转换为System.Linq.Enumerable.ToList()

答案 1 :(得分:0)

尝试放

<DataMember>属性属于您自己的类的属性。

此外,最好创建轻量级的DataContract对象来传递这一行,而不是像linq表这样庞大的家伙。