序列化意味着不必擔心過度分離字符或解析文本返回到有意義的數據。一個簡單的類來保存數據
<Serializable>
Public Class Preset
Public Property Name As String
Public Property ForeColor As Color
Public Property BackColor As Color
Public Property ThisItem As Integer
Public Property ThatItem As Integer
Public Property LastItem As String
Public Sub New()
End Sub
End Class
' elsewhere, a List of these things, so we can have many
Private Presets As New List(Of Preset)
添加一些假數據:
' file path/name:
PresetsFileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"Company", "Product", "presets.xml")
Dim p As Preset
p = New Preset With {.Name = "ziggy"}
Presets.Add(p)
' quick way, no temp var
Presets.Add(New Preset With {.Name = "User Defined"})
Presets.Add(New Preset With {.Name = "Default"})
Presets.Add(New Preset With {.Name = "Custom"})
序列化整組Preset
對象到文件(保存):
Using fs As New FileStream(PresetsFileName, FileMode.OpenOrCreate)
Dim Xml As New XmlSerializer(GetType(List(Of Preset)))
Xml.Serialize(fs, Presets)
End Using
加載:
' ToDo: check if File.Exists
Using fs As New FileStream(PresetsFileName, FileMode.Open)
Dim Xml As New XmlSerializer(GetType(List(Of Preset)))
Presets = CType(Xml.Deserialize(fs), List(Of Preset))
End Using
' show none were lost:
For Each ps As Preset In Presets
Console.WriteLine(ps.Name)
Next
輸出:
齊格
用戶定義
默認
定製
這就是它!用少於5行代碼保存或加載整個對象列表。
- 請注意,有不同種類的序列化器,這只是一個。我傾向於支持二進制序列化,因此用戶無法搜索文件並將值編輯爲可能導致應用程序崩潰的非法值。可以根據其串行需要
- 的
<Serializable>
屬性或他人(JSON,二進制格式,protobuf網)使用。
- 一些序列化程序還需要一個簡單的構造函數(不帶參數的
Sub New
)。
- 可以將
Save
和Load
的方法定義爲Preset
類中的Shared
方法。特別是如果有一個集合班(不只是List
)。
我想從一個文件加載應用程序的數據一下子,就用哪一個是活躍的。至於文件佈局,我會使用序列化。請注意,您可能需要添加語言或技術標籤以獲得更具體的答案。 – Plutonix
我認爲一個文件將是要走的路。我只需要解析文件來查找我正在查找的條目,這對某種分隔字符應該不會有什麼壞處。 我很熟悉序列化的概念,但現在看它,我相信我正在手動。我正在將數據寫入文件,然後將其讀回並在需要時將其翻譯回對象。有沒有更好的方法來做到這一點? 感謝您的回答。 – Django