WCF Linq to SQL Table - System.Data.Linq.Table не может быть сериализован - PullRequest
0 голосов
/ 01 декабря 2009

Я не могу понять это, проходя демонстрации, которые, кажется, работают. У меня есть служба 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 ]

3 голосов
/ 01 декабря 2009

Не возвращайте Table<T> из вашего сервиса. Это сложный запрашиваемый тип, который зависит от его DataContext и не является коллекцией в памяти.

Верните List<T>, вы можете преобразовать Table<T> в List<T>, вызвав System.Linq.Enumerable.ToList().

0 голосов
/ 01 декабря 2009

Попробуйте поставить

<DataMember> атрибут ваших свойств вашего класса.

Кроме того, лучше создать легкий объект DataContract для передачи по линии, а не большой громоздкий чувак, как таблица linq.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...