Ошибка при использовании WCF и DataContractSerializer - PullRequest
1 голос
/ 13 ноября 2009

У меня довольно сложная объектная модель, которую я пытаюсь сериализовать с использованием WCF. Я столкнулся с проблемой, когда я могу создать новый экземпляр на сервере и вернуть его клиенту, а затем попытаться передать этот же объект обратно или даже сериализовать его с помощью DataContractSerializer, который выдает исключение.

Метод теста Server.Service.Test.SerializationTest.TestFilingSerialization вызвал исключение: System.Runtime.Serialization.SerializationException: произошла ошибка десериализации объекта типа MyNameSpace.MyObject. Не задан метод для свойства '' в типе ''

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

set
{
    _backingField = value;
    _backingField.IsDirtyManager.SetIsDirty();
    NotifyPropertyChanged("MyProperty");
    if (!ContainsType(_backingField.GetType()))
    {
        Aggregates.Add(_backingField);
    }
}

Если я закомментирую Aggregates. При добавлении он переходит к следующему свойству и выдает там то же исключение, кикер, он перебирает другие свойства с тем же кодом, прежде чем попадает в этот и умирает, поэтому я не не знаю, в чем может быть проблема.

У любого есть опыт, где настоящая ошибка, потому что имя свойства и тип не заполнены в исключении, поэтому кажется, что ошибка должна быть чем-то другим. Если я просто создаю новый экземпляр на клиенте, я могу десериализовать и сериализовать без проблем, поэтому здесь должно быть что-то, чего мне не хватает. Любые идеи о том, что искать?

EDIT

Я буквально делаю только это:

  1. Создать экземпляр
  2. Serialize
  3. De-сериализация
  4. Re-сериализация
    1. умри здесь

Ответы [ 3 ]

1 голос
/ 17 ноября 2009

Хорошо, разобрался. Последний разработчик установил свойство Order в атрибуте DataMember. Это было свойство с заказом перед свойством в сообщении об ошибке, которое вызывало проблемы. В этом классе я пропустил пару свойств только для чтения.

1 голос
/ 13 ноября 2009

Я предполагаю, что "Агрегаты" - это список в вашем классе.

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

Это не соответствует получаемой вами ошибке, но стоит проверить.

EDIT

В Visual Studio перейдите в «Инструменты» -> «Параметры» -> «Отладка» -> «Общие» и снимите флажок «Включить только мой код». Затем запустите его снова, вы можете получить лучшее сообщение об ошибке.

0 голосов
/ 14 ноября 2009

Вы можете увидеть это, если ваш сеттер защищен или закрыт. Если он не помечен как общедоступный, сериализатор не сможет его установить. Как вы выставляете свою коллекцию агрегатов?

...