我有一个项目,数据来自网络(不是数据库),并且具有自己的解析特性。
解析过程将数据存储在一个充满Public Property
的类的对象数组中。
这个类和它的数组用作BindingSource的对象数据源,它在屏幕上的DataGridView中将值显示为一个漂亮的表。
现在我需要将这些数据保存到磁盘(以后能够将其恢复回发送回网络)。
我以前使用DataSet保存到XML并且实现起来轻而易举,但这个让我感到困惑。
所有这些信息已经在代码中,所以我不认为我应该逐行输入,每个属性都能够保存它。 我一直在尝试以某种方式将数据从绑定器中获取到新的DataSet,因此我可以使用XML方法,或者某种方式从绑定器到磁盘,甚至直接访问DataSource对象。
我真的不在乎它是否可读为磁盘中的纯文本,只要我稍后可以将其读回DataSource对象。
任何想法如何实现?
答案 0 :(得分:1)
序列化怎么样?
Dim fileStream As Stream = File.Open("somefile.txt", FileMode.Create)
Dim xmlFormatter As New System.Xml.Serialization.XmlSerializer(GetType(YourClass))
xmlFormatter.Serialize(fileStream, anObjectOfYourClass)
fileStream.Close()
要使其正常工作,您必须使用Serializable()
属性为您的班级添加注释。这将存储除具有NonSerialized()
属性的属性之外的任何属性。当然,类中的所有类型都应该是可序列化的。
要稍后加载数据,除了使用xmlFormatter.Deserialize()
。
答案 1 :(得分:1)
为什么不使用XmlSerializer来保存对象?
示例:强>
Class MyData
Public Property Data1 As String
Public Property Data2 As Int32
Public Property Data3 As String()
End Class
Sub Main
Dim d = New MyData() With { _
.Data1 = "FooBar", _
.Data2 = 1337, _
.Data3 = new String(){"Foo", "Bar"} _
}
Dim serializer = new System.Xml.Serialization.XmlSerializer(gettype(MyData))
'' Saving an object
Using fs = new System.IO.FileStream("c:\users\username\mydata.xml", System.IO.FileMode.Create)
serializer.Serialize(fs, d)
End Using
'' Loading the saved data to a new object
Using fs = new System.IO.FileStream("c:\users\username\mydata.xml", System.IO.FileMode.Open)
Dim new_one = CType(serializer.Deserialize(fs), MyData)
'' Do something
End Using
End Sub
产生的文件内容:
<?xml version="1.0"?>
<MyData xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Data1>FooBar</Data1>
<Data2>1337</Data2>
<Data3>
<string>Foo</string>
<string>Bar</string>
</Data3>
</MyData>