Рекурсивный объект, не переданный через WCF

#wcf

#wcf

Вопрос:

Я объясню свой дизайн класса

 public class A
{
   public Ilist<B> Something { get; set; }
}

public class B
{
   public A ParentA { get; set; }
}
  

Теперь я пытаюсь передать A через WCF, и он просто выдает исключение. Есть ли какой-то атрибут, который я должен установить, чтобы заставить это работать, или это вообще невозможно в WCF

Комментарии:

1. Вам нужно принять еще несколько ответов. Вы получите больше ответов.

Ответ №1:

Попробуйте украсить класс A с:

 [DataContract(IsReference = true)]
  

И класс B с только:

 [DataContract]
  

Это сообщит WCF, что это типы, которые вы собираетесь использовать в своем сервисе, и IsReference решит проблему циклических ссылок, а также сократит размер вашего сообщения. Вы также можете попробовать поиграть с установкой IsReference на B, а не на A — я не помню точно, как это ведет себя с моей головы.

Ответ №2:

Вам необходимо использовать DataContracts

 [DataContract]
[KnownType(typeof(B))]
class A
{
   public Ilist<B> Something { get; set; }
}

[DataContract]
class B
{
   public A ParentA { get; set; }
}