Я использую Silverlight 4, .NET 4.0.
У меня есть объект, определенный в общей библиотеке (совместно используемой моим проектом Silverlight и веб-проектом, в котором размещена служба WCF)
Объект представляет собой древовидную структуру, у которой есть список своих дочерних элементов, а также ссылки на своих родителей и корень.
ie.
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 должна знать, что она должна сохранять ссылки ...
Очень признателен за любую помощь по этому поводу.