【问题标题】:How to save an object datasource data to disk?如何将对象数据源数据保存到磁盘?
【发布时间】:2012-07-29 06:44:07
【问题描述】:

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

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

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

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

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

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

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

有什么想法可以做到吗?

【问题讨论】:

  • 嗨 Filburt,我不确定您为什么从标题中删除了 VB.NET,它不是一个标签,它通过说明我正在编程的平台为问题提供了一个上下文。

标签: xml vb.net data-binding datasource


【解决方案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>

【讨论】:

  • 你和另一个人几乎同时提出了同样的答案。我不知道这存在,我现在试试看。
  • 很好的回应,非常好和完整。只是一个评论,我不得不使用`Dim serializer = new System.Xml.Serialization.XmlSerializer(gettype(MyData()))`所以序列化器是一个MyData数组。而且运行顺畅。我将添加“保存”对话框和其他详细信息。谢谢!
  • @Budius 很高兴我能帮上忙 :-)
【解决方案2】:

序列化呢?

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.

【讨论】:

  • 你和另一个人几乎同时提出了同样的答案。我不知道这存在,我现在试试看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-29
  • 1970-01-01
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-09
相关资源
最近更新 更多