1

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

解析过程将数据存储在一个类的对象数组中,该类对象中包含Public Property.

此类及其数组用作 BindingSource 的对象数据源,该 BindingSource 将值显示为屏幕上 DataGridView 中的漂亮表格。

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

我以前使用过将 DataSet 保存到 XML 的工作,实现起来很容易,但这让我感到困惑。

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

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

任何想法如何做到这一点?

4

2 回答 2

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().

另请参阅文档。

于 2012-07-31T13:32:49.040 回答
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>
于 2012-07-31T13:33:19.017 回答