Двумерный массив -> XML

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

vi-kar
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 06.05.2008 (Вт) 12:56
Откуда: :Благовещенск

Двумерный массив -> XML

Сообщение vi-kar » 19.06.2008 (Чт) 14:16

1- Создаю динамический массив: Dim x(,) as string. Правильно создаю?

2- Далее записываю этот массив через класс:
Код: Выделить всё
Dim mySerialize As New Xml.Serialization.XmlSerializer(GetType(Class1))
Dim myWriter As New IO.StreamWriter(MyConfigFileName)
mySerialize.Serialize(myWriter, MyConfig)
myWriter.Close()


При записи в XML появляется ошибка, когда выполняется строчка
Код: Выделить всё
Xml.Serialization.XmlSerializer(GetType(Class1))

следующего содержания:
Возникла ошибка при отражении типа "WindowsApplication1.Class1"

Как исправить эту ошибку?

3- Массиву нужно присвоить данные из ListView:
Код: Выделить всё
x(0, 0) = ListView1.Items.Item(0).ToString


Правильно ли я это выполняю?

4- Вообще в XML можно записать двумерный массив?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 19.06.2008 (Чт) 14:50

1. Правильно.
2. А что за класс Class1? Что в нем есть?
3. Это присваивание первому элементу первого элемента ListView.
4. Почему нет?

З.Ы. Мало исходых данных, пиши больше. Короче, код в студию.
Весь мир матрица, а мы в нем потоки байтов!

vi-kar
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 06.05.2008 (Вт) 12:56
Откуда: :Благовещенск

Сообщение vi-kar » 19.06.2008 (Чт) 16:19

Вот класс формы(на форме всего два объекта: ListView и Button):

Код: Выделить всё
Public Class Form1
    Public MyConfig As New Class1
    Public MyConfigFileName As String = Application.StartupPath & "\data.xml"

    Private Sub ListView1_ColumnWidthChanging(ByVal sender As Object, ByVal e As System.Windows.Forms.ColumnWidthChangingEventArgs) Handles ListView1.ColumnWidthChanging
        e.Cancel = True
        e.NewWidth = ListView1.Columns.Item(e.ColumnIndex).Width
    End Sub

    Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
        Me.Dispose()
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim a, b, c As Integer
        a = 0
        b = 0
        c = ListView1.Items.Count

        While a < c
            If b = 0 Then
                MyConfig.x(a, b) = ListView1.Items.Item(a).ToString
            Else
                MyConfig.x(a, b) = ListView1.Items(a).SubItems(b).ToString
            End If
            b = b + 1
            If b = 3 Then
                b = 0
                a = a + 1
            End If
        End While

        Dim mySerialize As New Xml.Serialization.XmlSerializer(GetType(Class1))
        Dim myWriter As New IO.StreamWriter(MyConfigFileName)
        mySerialize.Serialize(myWriter, MyConfig)
        myWriter.Close()
    End Sub
End Class


Вот класс Class1(в нем просто хранится переменная для записи ее в файл):

Код: Выделить всё
Imports System.Xml.Serialization

Public Class Class1
    Public x(,) As String
End Class
Последний раз редактировалось vi-kar 20.06.2008 (Пт) 5:20, всего редактировалось 1 раз.

vi-kar
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 06.05.2008 (Вт) 12:56
Откуда: :Благовещенск

Сообщение vi-kar » 20.06.2008 (Пт) 5:19

Ну так... Что я не правильно сделал?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 20.06.2008 (Пт) 7:45

Во-первых, у тебя нигде не переопределяется массив.
Во-вторых, сериализация сложных типов, а к таковым относятся в том числе и массивы любой размерности напрямую неподдерживается.
Однако сериализовать можно все, что угодно. Хоть в XML, хоть куда. Только для этого надо приложить ряд усилий. Щаз непомню, но в свое время, когда возился с сериализацией никаких особых сложностей не было. В MSDN очень подробно все описано.
Весь мир матрица, а мы в нем потоки байтов!

vi-kar
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 06.05.2008 (Вт) 12:56
Откуда: :Благовещенск

Сообщение vi-kar » 20.06.2008 (Пт) 8:20

Можно ссылочку на пример или сам пример, как переопределить массив?
И ссылку на пример в MSDN или пример сюда?

И вообще как искать примеры в msdn?

vi-kar
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 06.05.2008 (Вт) 12:56
Откуда: :Благовещенск

Сообщение vi-kar » 22.06.2008 (Вс) 7:19

Я посмотрел на msdn но того что надо не нашел. Выложите пример по работе с двумерным массивом и xml. Пожалуйста!

ACiD
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 261
Зарегистрирован: 10.12.2005 (Сб) 2:29
Откуда: г. Санкт - Петербург

Сообщение ACiD » 23.06.2008 (Пн) 16:24


vi-kar
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 06.05.2008 (Вт) 12:56
Откуда: :Благовещенск

Сообщение vi-kar » 24.06.2008 (Вт) 10:20

Спасибо за ссылку.
Пару дней с xml не работал, а сегодня решил продолжить опыты с примером.

Так вот. Застопорился опять на том же месте:

'Объявляю массив
Dim array(,) as string

'Присвайваю строку
array(0, 0) = ListView1.Items.Item(0).ToString

При запуске моего проекта на месте присваивания строки появляется ошибка: "В экземпляре объекта не заданна ссылка на объект"

Как исправить проблему?

На поисковике и MSDN (установленный с студией) был, но не чего не нашел.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 24.06.2008 (Вт) 12:47

Слово Redim автору не знакомо?
C его помощью можно можно (и нужно) задать нужный размер массиву.
Весь мир матрица, а мы в нем потоки байтов!

vi-kar
Новичок
Новичок
Аватара пользователя
 
Сообщения: 43
Зарегистрирован: 06.05.2008 (Вт) 12:56
Откуда: :Благовещенск

Сообщение vi-kar » 24.06.2008 (Вт) 13:01

Так, последняя проблемка решена. Сохранение получилось.

Теперь мучаюсь с загрузкой.
Когда разберусь, выложу исходники.


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList