Я использую Silverlight 4, .NET 4.0.
У меня есть объект, который определен в общей библиотеке (общей для моего проекта Silverlight и веб-проекта, в котором размещается служба WCF)
Объект - это древовидная структура, которая имеет список своих дочерних элементов, а также ссылку на своего родителя и корень.
т.е.
class TreeNode
{
public List<TreeNode> Children {get; set;}
public TreeNode Root { get; set; }
public TreeNode Parent { get; set; }
}
Проблема в том, что когда Silverlight пытается взять этот объект и отправить его на сервер, я получаю исключение о циклических ссылках.После некоторых исследований я обнаружил, что мне нужно включить атрибут IsReference в true следующим образом:
[DataContract(IsReference = true)]
class TreeNode
{
public List<TreeNode> Children {get; set;}
public TreeNode Root { get; set; }
public TreeNode Parent { get; set; }
}
Проблема в том, что когда я это делаю, моя служба WCF больше не работает, так как не может загрузить необходимуюсборка для этого:
"Не удалось загрузить файл или сборку" System.Runtime.Serialization, Version = 2.0.5.0 "
Это связано с тем, что проект, содержащий класс TreeNode, построен на Silverlightсреда выполнения, а не среда .NET и использует System.Runtime.Serialization v2.0.5.0, а веб-проект и служба WCF используют v4.0.30319.
Итак, мой вопрос: существует ли способ, которыйЯ могу получить сериализацию этого объекта при сохранении ссылок без перемещения всей структуры объекта в другой проект, который создается в соответствии со стандартной средой выполнения .NET 4.0?
Кроме того, стоит отметить, что я пытался использовать условную компиляцию, такую как:
#if SILVERLIGHT
[DataContract(IsReference = true)]
#endif
Но это не работает, так как служба WCF должна знать, что должна сохранять ссылки ...
Gочень признателен за любую помощь в этом.