提问人:Mark 提问时间:10/22/2008 更新时间:10/22/2008 访问量:15003
如何在 VB.NET 中编写对象以方便 XML 序列化?
How do I write objects for easy XML Serialization in VB.NET?
问:
我正在用 VB.NET 编写一个小应用程序,我希望一些类能够将自己写成 XML 以用作“保存”功能。我见过用于生成 VB 类的 XSD 文件,这些类可以很容易地将自身序列化为 XML 和序列化 XML。如果我有任何预先存在的XML格式,我需要遵守,因为我只是自己创建类,我该怎么做?
答:
2赞
Joel Coehoorn
10/22/2008
#1
既然你问过让它变得“简单”,那么有三条规则需要遵循,这将有助于让事情变得非常简单:
- 仅使用可序列化的属性类型
- 不要将集合或数组用作需要序列化的属性
- 不要有“坏”副作用的属性。我所说的“坏”主要是指由同一基础私有字段支持的两个公共属性。
请注意,如果你违反了这些规则,你可能仍然可以序列化你的类,但这可能会需要更多的工作。
对于项目 #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
你确定你可以和?我收到一个错误,说它必须实现它似乎没有实现。我四处寻找不同的版本/实现,但无济于事。我错过了什么吗?Using
XmlSerializer
IDispose()
评论