Как мне сериализовать сгенерированный класс? - PullRequest
0 голосов
/ 03 марта 2011

Я работаю над проектом и хочу отправить объект из базы данных через веб-сервис.

У меня есть это в качестве контракта на данные.

[DataContract]
public class CreateAlumniRequest
{
    [DataMember]
    public List<Alum.Data.EmploymentHistory> lstEmploymentHistory;
}

Однако я продолжаю получать эту ошибку.

Тип 'Alum.Data.Base.EmploymentHistoryBase' не может быть сериализовано. Рассмотрим маркировку это с DataContractAttribute атрибут, и маркировка всех его члены, которые вы хотите сериализовать с Атрибут DataMemberAttribute. Если тип представляет собой коллекцию, рассмотрим маркировку это с CollectionDataContractAttribute.

Что говорит мне, что мне, вероятно, нужно перейти в класс EmploymentHistory и пометить его как DataContract.

Проблема в том, что EmploymentHistory генерируется внутренним инструментом ORM - я не могу внести в него какие-либо изменения.

Можно ли сделать сериализацию EmploymentHistory без добавления этого атрибута в класс?

Есть ли другое решение? Единственное, о чем я могу подумать, это заново создать EmploymentHistory в сериализуемом классе и вручную отобразить объекты, что звучит как многократное дублирование.

Ответы [ 2 ]

1 голос
/ 03 марта 2011

Я не уверен, какой сериализатор вы пытаетесь использовать, но если Alum.Data.EmploymentHistory не может быть сериализован, потому что он не помечен как сериализуемый или по какой-то другой причине ... должен иметь возможность просто щелкнуть правой кнопкой мыши на нем и распакуй интерфейс. Использование create класса для реализации интерфейса с использованием меню рефакторинга и просто реализации {get; set;} для членов. Тогда вы можете использовать automapper для сопоставления данных.

Это звучит как много, но на самом деле это будет очень быстро ... и позволит избежать всего ручного отображения. Даже если вы не используете autopper для этого, это определенно стоит посмотреть. Существует так много ситуаций, когда вам нужно скопировать данные из одного объекта в другой ... AssertConfigurationIsValid облегчает тестирование вашего отображения. Если вы используете массивы, списки или любые другие вложенные объекты, все обрабатывается автоматически ... очень круто ... посмотрите.

0 голосов
/ 03 марта 2011

Если ваш генератор кода создает частичные классы, вы можете добавить отсутствующий атрибут в новые частичные файлы.

Если нет , вы можете попробовать другой сериализатор с открытым исходным кодом, например SharpSerializer или protobuf-net .

...