如何在 VB.NET 中编写对象以方便 XML 序列化?

How do I write objects for easy XML Serialization in VB.NET?

提问人:Mark 提问时间:10/22/2008 更新时间:10/22/2008 访问量:15003

问:

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

vb.net XML 序列化

评论


答:

2赞 Joel Coehoorn 10/22/2008 #1

既然你问过让它变得“简单”,那么有三条规则需要遵循,这将有助于让事情变得非常简单:

  1. 仅使用可序列化的属性类型
  2. 不要将集合或数组用作需要序列化的属性
  3. 不要有“坏”副作用的属性。我所说的“坏”主要是指由同一基础私有字段支持的两个公共属性。

请注意,如果你违反了这些规则,你可能仍然可以序列化你的类,但这可能会需要更多的工作。

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

0赞 Adam Straughan 10/22/2008 #2

若要使用简单的“保存”功能,请使用 .net xml 序列化 [1],或者在内存中创建一个 n,DateSet 以将“世界状态”保留在您认为合适的任意数量的 DateTable 中。相反,这取决于您尝试保留的对象模型的复杂程度。

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

6赞 nimish 10/22/2008 #3

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

参考资料

评论

0赞 SteveCinq 7/29/2018
确定你可以和?我收到一个错误,说它必须实现它似乎没有实现。我四处寻找不同的版本/实现,但无济于事。我错过了什么吗?UsingXmlSerializerIDispose()