Silverlight сериализует объект с циклами в графе объектов - PullRequest
2 голосов
/ 26 августа 2011

У меня проблема с сериализацией объектов при отправке их моим службам WCF. Мои занятия выглядят так.

public class Foo
{
     public Bar Bar { get; set; }
}

public class Bar
{
    public Foo Bar { get; set; }
}

Это вызывает цикл в графе моего объекта. Я исправил это на стороне сервера, используя PreserveReferencesOperationBehavior. Тем не менее, я все еще получаю сообщение об ошибке при попытке сериализации объектов в Silverlight.

Хотя я могу пометить свои объекты [DataContract(IsReference = true)], я бы предпочел не использовать этот метод, потому что у меня большое количество классов, многие из которых имеют более 100 свойств, и я не хочу добавлять [DataMember] атрибут для каждого свойства.

Есть ли другой способ заставить Silverlight сохранять ссылки?

Если это вообще имеет значение, я использую EntityFramework 4 с Code First.

1 Ответ

3 голосов
/ 26 августа 2011

Представленное поведение DataContract сериализатора присутствует, чтобы помочь в простых сценариях DTO. Если вы хотите сделать это «правильно», вы должны использовать атрибуты DataContract и DataMember.

Когда вы обнаружите, что у вас есть что-то кроме самых простых сценариев, вам просто нужно сделать все правильно. Правильный и единственный способ обработки циклических ссылок - с IsReference.

Урок здесь заключается в том, что полезная волшебная пыльца пикси заходит так далеко, что вам просто нужно вставить трансплантат. Извините, это не тот ответ, который вы искали.

...