Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
325 / 304 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
1
.NET 3.x

Сериализация данных

20.03.2011, 23:57. Показов 2107. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
Сериализую обьект:
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
System.Xml.Serialization.XmlSerializer ser =
                new System.Xml.Serialization.XmlSerializer(typeof(DataSet));
 
            DataSet dSet = new DataSet();
            DataTable dTable = new DataTable();
 
 
            for (int i = 0; i < dgvProduct.Columns.Count; i++)
            {
                //добавили колонки
                dTable.Columns.Add(new DataColumn(dgvProduct.Columns[i].HeaderText));
            }
 
            for (int j = 0; j < dgvProduct.Rows.Count; j++)
            {
                DataRow r = dTable.NewRow();
                for (int i = 0; i < dgvProduct.Columns.Count; i++)
                {
                    if (dgvProduct.Rows[j].Cells[i].Value != null)
                    {
                        r[i] = dgvProduct.Rows[j].Cells[i].Value.ToString();
                    }
                    else
                    {
                        r[i] = "";
                    }
                }
                dTable.Rows.Add(r);
            }
 
            dSet.Tables.Add(dTable);
 
            dgvProduct.Columns.Clear();
 
            dgvProduct.DataSource = dSet.Tables[0];
 
            dgvProduct.Columns[1].Width = 400; //это надо где-нить в свойствах таблицы прописать            
 
            System.IO.TextWriter tWriter = new System.IO.StreamWriter(@"C:\d.xml");
            ser.Serialize(tWriter, dSet);
            tWriter.Close();
Все работает=)

Отлично сериализуется, все дела

В той же программе:
я получаю данные не из обычного текстового файла, а из екселя sql-запросами:
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
        public void GetFrom(string name, System.Windows.Forms.DataGridView dgv)
        {
            System.Data.DataSet ds = new System.Data.DataSet();
 
            string ConnectionString =
                String.Format(
                "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=\"Excel 8.0;HDR=No\";Data Source={0}", name);
 
            OleDbConnection cn = new OleDbConnection(ConnectionString);
            cn.Open();
 
            // Получаем списко листов в файле            
            //System.Data.DataTable schemaTable = cn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
            //    new object[] { null, null, null, "TABLE" });
 
            // Берем номер листа
            //string sheet1 = (string)schemaTable.Rows[0].ItemArray[2];
            string select = String.Format("SELECT * FROM [{0}]", @"Заказ$");
 
            OleDbDataAdapter ad = new OleDbDataAdapter(select, cn);
            this.Table = new System.Data.DataTable();
            ad.Fill(this.Table);
 
            dgv.DataSource = this.Table;
        }
считываю их в DataGV, все отлично отображается)

далее, я пытаюсь его сериализовать:
C#
1
2
3
4
                        CamIn.GetFrom(openFileDialogComeIn.FileName, dgv);
                        //    this.Add_ComeIn(openFileDialogComeIn.FileName, folds[0]);
                                                
                        this.ToFolds(folds[0], openFileDialogComeIn.SafeFileName, CamIn.Table);
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
            System.IO.StreamWriter sW = new System.IO.StreamWriter(@"1.xml");
            //System.Xml.XmlWriter wr = new System.Xml.XmlTextWriter(@"DFolders1.xml", Encoding.UTF8);
            //System.IO.StreamWriter sW = new System.IO.StreamWriter(@"DFolders1.xml");
            //System.IO.FileStream fS = new System.IO.FileStream(@"DFolders.xml", System.IO.FileMode.OpenOrCreate);
            
 
            System.Xml.Serialization.XmlSerializer ser =
                new System.Xml.Serialization.XmlSerializer(typeof(DataSet));
            DataSet dSET = folds.ToData();
 
 
            ser.Serialize(sW, dSET);
 
            //bf.Serialize(fS, DFolds);//не получается сериализовать? почему?
            sW.Close();
но он сериализует только названия таблиц.

Странно думаю, делаю стоп-пойнт на строчке
C#
1
 DataSet dSET = folds.ToData();
Думаю, может они в датасете не записаны: читаю каждую строчку в Immidiat Window - все отлично, каждый элемент на своем месте

Нажимаю Ф5 - и в следующей строчке ничего не сериализуется опять, кроме названия таблиц?

Что за дела? Уже вторые сутки мучаюсь? Готов поверить в любую теорию, может DataSet не сериализует данные таблиц, которые в нем?

Добавлено через 32 минуты
Ага, для полной картины добавлю еще:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
        public void ToFolds(DFolder f, string firm, DataTable _table)
        {
 
 
            for (int i = 0; i < _table.Rows.Count; i++)
            {
                DString dS = new DString();
                dS.Art = Convert.ToInt32(DateTime.Today.Day.ToString() +
                    DateTime.Today.Month.ToString() +
                    DateTime.Today.Year.ToString() +
                    DateTime.Today.TimeOfDay.Hours.ToString()) + i;
                dS.Name = Convert.ToString(_table.Rows[i].ItemArray[0]);
                dS.theCount = Convert.ToInt32(_table.Rows[i].ItemArray[1]);
                dS.Firstcost = Convert.ToInt32(_table.Rows[i].ItemArray[2]);
                dS.Secondcost = Convert.ToInt32(_table.Rows[i].ItemArray[3]);
                dS.theDate = DateTime.Today.Date;
                dS.Firm = firm;
                dS.ParentFolder = f;
 
                f.Add(dS);
            }
 
        }
и
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
        public System.Data.DataSet ToData()
        {
            System.Data.DataSet dS = new System.Data.DataSet();
            for (int i = 0; i < this.Count; i++)
            {
                dS.Tables.Add(this[i].Name);
 
                for (int c =0; c<6;c++)
                {
                    dS.Tables[i].Columns.Add("Столбец" + c.ToString());
                }
 
                //создало колонки
 
                for (int n = 0; n < this[i].Count; n++)
                {
 
                    dS.Tables[i].Rows.Add(
                        new string[]{
                            (string)this[i][n].Art.ToString().Clone(),
                            (string)this[i][n].Name.ToString().Clone(),
                            (string)this[i][n].theCount.ToString().Clone(),
                            (string)this[i][n].Firstcost.ToString().Clone(),
                            (string)this[i][n].Secondcost.ToString().Clone(),
                            (string)this[i][n].Firm.ToString().Clone()
                        });
 
                }
                //создало строки
            }
для полной картины - это не секрет

Я уже копирую в отчаянии клон каждого стринга в Датасет, лишь бы он сериализовался. Кто может обьяснить этот полтергейст?

Добавлено через 2 часа 11 минут
Проблема разрешилась негаданно нежданно:
я смеялся долго))
Всего лишь полностью прописал путь, однако такой странной реакции сериализаторов не обьясняет
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2011, 23:57
Ответы с готовыми решениями:

Сериализация таблицы базы данных
Уважаемые Гуру! На сервере mysql база данных. Клиенты в разных городах работают с приложением,...

Сериализация данных для отправки по сети
Я считаю главным параметром данных при отправке данных по сети их размер. Я сталкивался с бинарной...

Сериализация полученных данных из MySQL в формате JSON
Доброго времени суток, товарищи. Сначала, что я делаю. Получаю из внешнего источника строку в...

Сериализация данных через приложение Windows Forms
Помогите пожалуйста разобраться с ошибкой при сериализации. Процесс выглядит следующим образом: 1....

0
20.03.2011, 23:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.03.2011, 23:57
Помогаю со студенческими работами здесь

Сериализация
Помогите пожалуйста с сериализацией..необходимо написать код сериализации для передачи информации...

Сериализация
public class IPzag { public BitArray version = new BitArray(4);//номер версии...

Сериализация
Вообщем проблема достаточно простая,есть класс сериализую его как по учебнику,все проходит...

сериализация
Помогите пожалуйста с сериализацией..необходимо написать код сериализации для передачи информации...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru