Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Распределённые приложения и сеть > wcf + silverlight вопрос


Автор: tapa 6.12.2011, 11:40
Привет. Ситуация такая:

На сервере, где крутится wcf сервис есть класс

Код

     public class ClassA
    {
        public string name;

        public List<ClassB> elmnts;
    }

    public class ClassB
    {
        public int id;

        public ClassB parent;

        public List<ClassB> childrens;
    }


а так же функция сервиса, для проверки работы
Код

        public ClassA Test()
        {
            var ca = new ClassA()
            {
                name = "lala",
                elmnts = new List<ClassB>()
            };

            var cb1 = new ClassB() { id = 1,parent = null, childrens = new List<ClassB>() };

            cb1.childrens.AddRange(new List<ClassB>(){
                        new ClassB(){id =11,  parent = cb1, childrens = new List<ClassB>()},
                        new ClassB(){id =12, parent = cb1, childrens = new List<ClassB>()},
                        new ClassB(){id =13, parent = cb1, childrens = new List<ClassB>()}
                    });
            var cb2 = new ClassB() { id = 2, parent = null, childrens = null };

            ca.elmnts.Add(cb1);
            ca.elmnts.Add(cb2);

            return ca;
        }



и на клиенте вылетает ошибка Not Found  в с генерированном студией коде.

однако, если убрать поле "public ClassB parent", то всё ок. данные передаеются,ошибки нет. это изза того, что получается "замкнутый круг" ? дети указывают на родителей  не получается сериализовать данные?
Вопрос - как пофиксить ?smile




Автор: tapa 6.12.2011, 19:39
можно так
http://chabster.blogspot.com/2008/02/wcf-cyclic-references-support.html

или вот так
Код

    [DataContract(IsReference = true)]
    public class ClassA
    {
        [DataMember]
        public string name;
        [DataMember]
        public List<ClassB> elmnts;
    }

    [DataContract(IsReference=true)]
    public class ClassB
    {
        [DataMember]
        public int id;
        [DataMember]
        public ClassB parent;
        [DataMember]
        public List<ClassB> childrens;
    }

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)