Объекты Linq To Sql и проблема сериализации

Я пытаюсь сериализовать граф объектов. Это работает до тех пор, пока мне не нужно загрузить дочернюю сущность, которая является набором сущностей. Система не позволит ей сериализоваться... она выдает мне эту ошибку:

Тип 'System.Data.Linq.EntitySet`1[NetDataContractSerializerTest.JobService]' не может быть сериализован. Попробуйте пометить его атрибутом DataContractAttribute и пометить все его элементы, которые вы хотите сериализовать, атрибутом DataMemberAttribute. Если тип является коллекцией, попробуйте пометить его с помощью CollectionDataContractAttribute. См. Документацию Microsoft .NET Framework для других поддерживаемых типов.

Вот код, который я использую:

        DataClasses1DataContext dataAccessContext = new DataClasses1DataContext();
        MemoryStream stream = new MemoryStream();

        DataLoadOptions dataloadOptions = new DataLoadOptions();
        dataloadOptions.LoadWith<JN>(j => j.nh);  
        dataloadOptions.LoadWith<JN>(j => j.JobServices);// this is the child entity set

        dataAccessContext.LoadOptions = dataloadOptions;

        var jn= dataAccessContext.JN.Where(j => j.LocnID.Trim() == "HT").ToList();
        var netDataContractSerializer = new NetDataContractSerializer();
        netDataContractSerializer.Serialize(stream, jn); //the error happens here

Если я удалю

dataloadOptions.LoadWith(j => j.JobServices)

данные будут сериализованы с неповрежденными таблицами JN и nh. Но когда я ставлю

dataloadOptions.LoadWith(j => j.JobServices)

обратно я получаю ошибку.

Я лично думаю, что он хочет, чтобы я добавил ToList() в JobServices, к сожалению, я не могу сделать

dataloadOptions.LoadWith(j => j.JobServices.ToList())

Это выдает ошибку.

Есть идеи?

2 ответа

Решение

Ну да ладно.... посмотри, что я нашел..... Это, казалось, отлично сериализовало и десериализовало мои вещи. Вместо того чтобы использовать NetDataContractSerializer.Serialize(), этот парень написал функции сериализации и десериализации, которые использовали DataContractSerializer, XMLWriter и XMLReader.

Проверьте ссылку ниже

http://www.codeproject.com/Tips/47054/How-to-serialize-list-of-linq-entities-ex-from-DBM

Сообщение об ошибке очень информативно: класс JobService не помечен для сериализации как контракт данных.

Вам нужно будет украсить его DataContractAttribute атрибут, и украсить членов DataMember приписывать.

[DataContract]
public class JobService
{
     [DataMember]
     public string SomeProperty { get; set;}

}
Другие вопросы по тегам