Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Вопрос по сериализации Добавлено: 17.02.10 07:12  

Автор вопроса:  mig84
Здравствуйте! Столкнулся с проблемой - нужно сохранить объект класса в файл (желательно XML, но в принце можно и в любой другой), в этом объекте присутствует ArrayList, который в свою очередь заполнен объектами другого класса.
Сериализация работает с использованием SoapFormatter, а вот XMLSerializer - к сожалению, нет (после нескольких безуспешных попыток, я обнаружил упоминание в справке о том, что XMLSerializer не работает с ArrayList).
А проблема, собственно, в том, что SoapFormatter включает в XML, ссылку на сборку, что меня не устраивает...

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #1 Добавлено: 17.02.10 08:18
что XMLSerializer не работает с ArrayList

вы неверно истолковали прочитанное.. дело в том, что XMLSerializer не знает как работать с коллекциями. Все, что необходимо вам сделать это задать соответствующий аттрибут для коллекции в т.ч. и для ArrayList

  1.  
  2.     [Serializable]
  3.     public class Employee
  4.     {
  5.         public string Name { get; set; }
  6.         public int Age { get; set; }
  7.     }
  8.  
  9.     [Serializable]
  10.     public class Organization
  11.     {
  12.         public Organization() { Employies = new ArrayList(); }
  13.         [XmlArrayItem(typeof(Employee))]
  14.         public ArrayList Employies { get; set; }
  15.     }
  16.  
  17.     class Program
  18.     {
  19.         static string m_xmlPath = @"c:\org.xml";
  20.         static void Main(string[] args)
  21.         {
  22.             Organization org = new Organization();
  23.             org.Employies.Add(new Employee() { Name = "John", Age = 25 });
  24.             org.Employies.Add(new Employee() { Name = "Mary", Age = 19 });
  25.  
  26.             XmlSerializer serializer = new XmlSerializer(typeof(Organization));
  27.  
  28.             /* serialize */
  29.             using (FileStream fs = new FileStream(m_xmlPath, FileMode.OpenOrCreate))
  30.                 serializer.Serialize(fs, org);
  31.         }
  32.     }
  33.  

Ответить

Номер ответа: 2
Автор ответа:
 mig84



Вопросов: 1
Ответов: 5
 Профиль | | #2 Добавлено: 17.02.10 08:52
Спасибо за пояснение! Сейчас попробую.

Ответить

Номер ответа: 3
Автор ответа:
 mig84



Вопросов: 1
Ответов: 5
 Профиль | | #3 Добавлено: 17.02.10 10:43
Все работает! :)
Жаль только, что в vb немного другой синтаксис для XML атрибутов. Какой-то неудобочитаемый, на мой взгляд.

Ответить

Номер ответа: 4
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #4 Добавлено: 17.02.10 10:49
Жаль только, что в vb немного другой синтаксис для XML атрибутов.

ну это уже дело вкуса.. лично мне VB вообще не нравится из за громоздкости конструкций, поэтому я его и не использую...

Ответить

Номер ответа: 5
Автор ответа:
 mig84



Вопросов: 1
Ответов: 5
 Профиль | | #5 Добавлено: 17.02.10 12:40
еще один вопрос возник - как поступить, если в одном из полей сериализуемого объекта содержится массив?
вот например
  1.         Dim serializator As New XmlSerializer(GetType(MyClass))


выдает ошибку "Возникла ошибка при отражении типа "WindowsApplication1.MyClass"."
если в MyClass:
  1.  
  2. <Serializable()> Public Class MyClass
  3. .
  4. <XmlArrayItem(GetType(MyClass)), _
  5. XmlArrayItem(GetType(Single))> _
  6. Public x2massiv(4, 15) As Single
  7. .
  8. .
  9. .
  10. End class

Ответить

Номер ответа: 6
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #6 Добавлено: 17.02.10 15:53
See inner exception...
Cannot serialize object of type System.Single[,]. Multidimensional arrays are not supported.

Ответить

Номер ответа: 7
Автор ответа:
 mig84



Вопросов: 1
Ответов: 5
 Профиль | | #7 Добавлено: 18.02.10 05:11
Жаль. А вот SoapFormatter может проводить сериализацию таких классов. Одна проблема - привязывается к сборке.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам