如何将对象数据源数据保存到磁盘?

时间:2012-07-31 13:23:56

标签: xml vb.net data-binding datasource

我有一个项目,数据来自网络(不是数据库),并且具有自己的解析特性。

解析过程将数据存储在一个充满Public Property的类的对象数组中。

这个类和它的数组用作BindingSource的对象数据源,它在屏幕上的DataGridView中将值显示为一个漂亮的表。

现在我需要将这些数据保存到磁盘(以后能​​够将其恢复回发送回网络)。

我以前使用DataSet保存到XML并且实现起来轻而易举,但这个让我感到困惑。

所有这些信息已经在代码中,所以我不认为我应该逐行输入,每个属性都能够保存它。 我一直在尝试以某种方式将数据从绑定器中获取到新的DataSet,因此我可以使用XML方法,或者某种方式从绑定器到磁盘,甚至直接访问DataSource对象。

我真的不在乎它是否可读为磁盘中的纯文本,只要我稍后可以将其读回DataSource对象。

任何想法如何实现?

2 个答案:

答案 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()

之外,过程类似

另见the documentation.

答案 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>