Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 08.10.2012
Сообщений: 14
1

XML Serialization и ошибка "требуется метод Add(object)"

05.11.2012, 19:14. Просмотров 1475. Ответов 9
Метки нет (Все метки)

Здравствуйте. Возникла проблема с сериализацией класса: IEnumerable. При выполнении возникает Exception и требует метод Add(object)...Пробовала написать этот метод. Тогда при выполнении пишет, что обнаружена циклическая ссылка...помогите пожалуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.11.2012, 19:14
Ответы с готовыми решениями:

Html Agility Pack в Windows Phone и ошибка "Следует добавить ссылку на сборку "System.Xml.XPath"
public BashPage() { InitializeComponent(); HtmlDocument doc =...

Ошибка после конвертации метода на С++ к С#: "Неявное преобразование типа "int" в "bool" невозможно"
Ошибка после преобразования метода на С++ к С#: "Неявное преобразование типа "int" в "bool"...

Ошибка CS0019: Оператор "*" не может применяться к операндам типа "decimal" и "float"
Здравствуйте! Писал приложение и наткнулся на интересную ошибку (честно говоря, я не совсем понимаю...

Ошибка "этот файл используется" при удалении объектов и XML файлов
Ошибка возникает при удалении объектов и XML файлов. Иногда все срабатывает нормально, а иногда...

9
Master of Orion
Эксперт .NET
6066 / 4924 / 903
Регистрация: 10.07.2011
Сообщений: 14,520
Записей в блоге: 5
05.11.2012, 19:43 2
newkatenok, мб код?..
0
0 / 0 / 0
Регистрация: 08.10.2012
Сообщений: 14
05.11.2012, 19:52  [ТС] 3
Кода очень много...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 [Serializable]
    public class Group : IEnumerable<Student>, IDisposable
    {
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        [XmlArray("list")]
        [XmlArrayItem("student")]
        public List<Student> _group { get; set; }
        [DataMember]
      //  [XmlIgnore]
        public Faculty Faculty { get; set; }
 
        //всякие методы
 
        public void XMLSerialization()
        {
            var serializer = new XmlSerializer(typeof(Student));
            using (Stream stream = File.Create("./faculty_xml_ser.xml"))
            {
                    foreach (var st in this)
                    {
                        serializer.Serialize(stream, st);
                    }
                }
            }
        }
0
Master of Orion
Эксперт .NET
6066 / 4924 / 903
Регистрация: 10.07.2011
Сообщений: 14,520
Записей в блоге: 5
05.11.2012, 19:54 4
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[Serializable]
public class Group : IEnumerable<Student>, IDisposable
{
[DataMember]
public string Name { get; set; }
[DataMember]
[XmlArray("list")]
[XmlArrayItem("student")]
public List<Student> _group { get; set; }
[DataMember]
// [XmlIgnore]
public Faculty Faculty { get; set; }
 
//всякие методы
 
public void XMLSerialization()
{
var serializer = new XmlSerializer(Group);
using (Stream stream = File.Create("./faculty_xml_ser.xml"))
{
serializer.Serialize(stream, this);
}
}
Добавлено через 24 секунды
newkatenok, во-первых теги не забываем. Во-вторых форматирование.
0
0 / 0 / 0
Регистрация: 08.10.2012
Сообщений: 14
05.11.2012, 20:06  [ТС] 5
в строке
Код
var serializer = new XmlSerializer(Group);
ошибка тогда...я не знаю как на этом сайте форматировать...

Добавлено через 1 минуту
ошибка: невозможно создать временный класс <результат = 1>
0
Master of Orion
Эксперт .NET
6066 / 4924 / 903
Регистрация: 10.07.2011
Сообщений: 14,520
Записей в блоге: 5
05.11.2012, 20:10 6
newkatenok, очепятка
C#
1
var serializer = new XmlSerializer(typeof(Group));

Не по теме:

я не знаю как на этом сайте форматировать...
Сверху BB-коды С++ С# pascal и так далее... При копировании в теги все пробелы сохраняются

0
0 / 0 / 0
Регистрация: 08.10.2012
Сообщений: 14
05.11.2012, 20:45  [ТС] 7
я typeof писала. ошибка. кстати после той ошибки еще пишется "невозможно объявить локальную переменную с именем 'e' в этой области действия, т к она придаст другое значение 'e', которая уже используется в области действия 'родительский или текущий' для обозначения чего-то другого"

Добавлено через 6 минут
хотя для класса Group работает. но когда пытаюсь написать такой метод для класса Faculty:IEnumerable<Group> не работает


C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    [Serializable]
    [DataContract]
    public class Faculty : IEnumerable<Group>
    {
        [DataMember]
        public string Name { get; set; }
        [DataMember]
        [XmlArray("list")]
        [XmlArrayItem("group")]
        public List<Group> _faculty { get;  set; }
 
public void XMLSerialization()
        {
            var serializer = new XmlSerializer(typeof(Faculty));
            using (Stream stream = File.Create("./faculty_xml_ser.xml"))
            {
                        serializer.Serialize(stream, this);
            }
        }
     }
Добавлено через 24 минуты
ну помогииите пожааалуйста. Не хочет оно работать
0
Master of Orion
Эксперт .NET
6066 / 4924 / 903
Регистрация: 10.07.2011
Сообщений: 14,520
Записей в блоге: 5
05.11.2012, 20:52 8
newkatenok, единственный ответ, который я нашел: использовать на одном из уровней (или везде) бинарную сериализацию, потому что это баги конкретно Xml-сериализации. Пруф: http://social.msdn.microsoft.c... EAC7AE5929
В принципе можете поспрашивать: вот облегченный вариант вашей проблемы, можете ей пользоваться для демонстрации
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
 
namespace SerializationTest
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            Branch b = new Branch();
            b.Add(new Node());
            b.Save();
            Tree t = new Tree();
            t.Add(b);
            t.Save();
        }
    }
 
 
    [Serializable]
    public class Node
    {
        public int X { get; set; }
    }
 
 
    [Serializable]
    public class Branch : IEnumerable<Node>
    {
        private readonly List<Node> _nodes;
 
 
        public Branch()
        {
            _nodes = new List<Node>();
        }
 
 
        public IEnumerator<Node> GetEnumerator()
        {
            foreach (var node in _nodes)
                yield return node;
        }
 
 
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
 
        public void Add(Node node) 
        {
            _nodes.Add(node);
        }
 
        public void Save()
        {
            var s = new XmlSerializer(typeof (Branch));
            using (Stream stream = File.Create("branch.xml"))
                s.Serialize(stream, this);
        }
    }
 
    [Serializable]
    public class Tree : IEnumerable<Branch>
    {
        private readonly List<Branch> _branches;
 
 
        public Tree()
        {
            _branches = new List<Branch>();
        }
 
 
        public IEnumerator<Branch> GetEnumerator()
        {
            foreach (var branch in _branches)
                yield return branch;
        }
 
 
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
 
        public void Add(Branch branch)
        {
            _branches.Add(branch);
        }
 
        public void Save()
        {
            var s = new XmlSerializer(typeof(Tree));
            using (Stream stream = File.Create("tree.xml"))
                s.Serialize(stream, this);
        }
    }
}
0
0 / 0 / 0
Регистрация: 08.10.2012
Сообщений: 14
05.11.2012, 21:00  [ТС] 9
спасибо. мне просто по заданию нужна именно xml-сериализация, бинарная не пойдет...
0
Master of Orion
Эксперт .NET
6066 / 4924 / 903
Регистрация: 10.07.2011
Сообщений: 14,520
Записей в блоге: 5
05.11.2012, 23:06 10
newkatenok, ну спросите у преподавателя (или кто вам задание задал?..) как обойти проблему, может он и сам о ней не знает.

Добавлено через 15 минут
Я, в свою очередь, пока спросил на msdn, может они что придумают

Добавлено через 1 час 45 минут
У вас стоит решарпер?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.11.2012, 23:06

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

В чём ошибка (использование Cuetools) "метод имеет несколько параметров"?
Взял код отсюда. Подключил всё, что нужно. using CUETools; using CUETools.Codecs; using...

Ошибка "Требуется идентификатор"
Есть код и я не понимаю почему студия на него ругается:namespace RI_LR1 { public delegate...

Ошибка: "Не удалось привести тип объекта "System.ConsoleKeyInfo" к типу "System.IConvertible"."
При запуске пишет, что &quot;Не удалось привести тип объекта &quot;System.ConsoleKeyInfo&quot; к типу...

После запуска среды выскакивает окошечко с ошибкой "Unknown error" или "Неизвестная ошибка"
Доброго времени суток. Возникла проблема. После запуска среды выскакивает окошечко с ошибкой...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.