Как мне написать объекты для легкой сериализации XML в VB.NET? - PullRequest
3 голосов
/ 22 октября 2008

Я пишу небольшое приложение на VB.NET, и мне бы хотелось, чтобы некоторые классы могли записывать себя в XML для использования в качестве функции «сохранения». Я видел XSD-файлы, используемые для генерации VB-классов, которые могут очень легко сериализовывать себя в XML и из него. Как бы я это сделал, если у меня есть какой-либо ранее существующий формат XML, которому я должен соответствовать, поскольку я просто сам создаю классы?

Ответы [ 3 ]

6 голосов
/ 22 октября 2008

Используйте пространства имен System.Xml и System.Xml.Serialization. Они описывают классы, которые вы можете использовать для аннотирования членов ваших классов соответствующим тегом.

Например (в C #):

[XmlRoot("foo")]
public class Foo
{
     [XmlAttribute("bar")] 
     public string bar;
     [XmlAttribute("baz")] 
     public double baz;
}

Или в VB.NET (может быть не совсем синтаксически правильным):

<XmlRoot ("foo")> _
Public Class Foo
     <XmlAttribute ("bar")>_
     Public bar As String
     <XmlAttribute ("baz")>_
     Public baz As String
End Class

Затем вы можете использовать класс XmlSerializer для вывода XML.

В C #:

using(XmlSerializer xmls = new XmlSerializer(typeof(Foo)){
    TextWriter tw = new StreamWriter( "foo.xml" );
    //use it!
}

Или VB:

Using xmls As New XmlSerializer(gettype(Foo)), _
    tw As TextWriter = New StreamWriter("foo.xml")

    ''//use it!
End Using

Ссылка .

2 голосов
/ 22 октября 2008

Поскольку вы спрашивали о том, как сделать это «легко», необходимо следовать трем правилам, которые помогут упростить задачу:

  1. Используйте только те типы свойств, которые являются сериализуемыми
  2. Не используйте коллекции или массивы в качестве свойств, которые необходимо сериализовать
  3. Не иметь свойств с "плохими" побочными эффектами. Под «плохим» я в основном имею в виду два общедоступных свойства, которые поддерживаются одним и тем же частным полем.

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

Для элемента № 2 для быстрого исправления используется набор данных или набор данных, поскольку они сериализуемы.

0 голосов
/ 22 октября 2008

Чтобы воспользоваться простой функцией «сохранения», либо используйте сериализацию .net xml [1], либо создайте себе n в памяти DateSet, чтобы сохранить «состояние мира» в таком количестве DateTables, которое вы считаете нужным. Скорее, это зависит от того, насколько полна ваша объектная модель, которую вы пытаетесь сохранить.

[1] самый простой пример, который я мог быстро найти (C #, извините, но вы поймете суть) http://www.jonasjohn.de/snippets/csharp/xmlserializer-example.htm

...