如何在VB.NET中编写易于XML序列化的对象?

时间:2008-10-21 21:11:24

标签: xml vb.net xml-serialization

我正在VB.NET中编写一个小应用程序,我希望有些类能够将自己编写为XML以作为“保存”功能。我见过用于生成VB类的XSD文件,可以非常容易地将自己序列化为XML。如果我有任何预先存在的XML格式需要遵循,我将如何做到这一点,因为我自己只是在创建类?

3 个答案:

答案 0 :(得分:6)

使用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

Reference

答案 1 :(得分:2)

既然你问过“让它变得容易”,那么有三条规则可以帮助你保持简单:

  1. 仅使用可序列化的属性类型
  2. 不要将集合或数组用作需要序列化的属性
  3. 没有“坏”副作用的属性。 “糟糕”,我主要是指两个由同一底层私有字段支持的公共属性。
  4. 请注意,如果您违反这些规则,您仍然可以序列化您的课程,但这可能会有更多的工作。

    对于第2项,快速修复是使用数据表或数据集,因为它们是可序列化的。

答案 2 :(得分:0)

要使用简单的“保存”功能,请使用.net xml序列化[1]或在内存中创建一个n,以便在您认为合适的任何数量的DateTable中保留“世界状态”。它取决于你试图坚持的对象模型的补充方式。

[1]我能很快找到的最简单的例子(C#,抱歉,但你会得到要点)http://www.jonasjohn.de/snippets/csharp/xmlserializer-example.htm