Поскольку он может вам понадобиться, вот пример, по которому вы можете сохранить свои данные как JSON.
► Если вы не используете. Net Core 3.0+ (который предоставляет свой собственный System.Text. Json - когда вы перейдете на. Net Core, переключитесь на это, не задумываясь), я предлагаю установить Json. Net:
- Откройте диспетчер пакетов NuGet в Visual Studio (
Tool -> NuGet Package Manager -> Manage NuGet Packages for Solution
) - найдите
Newtownsoft.Json
. Первой записью на эту дату будет Newtownsoft.Json v.12.0.3
. - Выберите установку пакета, создайте решение.
Теперь, чтобы сериализовать DataTable, вам нужна одна команда :
Dim json as String = JsonConvert.SerializeObject([Your DataTable])
Для десериализации данных, преобразования JSON в DataTable, еще одна команда:
Dim dt = JsonConvert.DeserializeObject(Of DataTable)([JSON String])
- Они реализуются в коде двумя способами:
SaveMyPasswords()
и LoadMyPasswords()
. Вам просто нужно указать путь, по которому хранится JSON.
Путь, где хранятся данные, является важным вопросом. Вы можете сделать разные варианты:
- часто используется папка User
[User]\AppData\Local
. Это местоположение возвращается Application.LocalUserAppDataPath
. - раздел
[User]\AppData\Roaming
возвращается Application.UserAppDataPath
. - Папка
\ProgramData
- хороший вариант, это путь возвращается как Application.CommonAppDataPath
Обратите внимание, что эти пути уже содержат подпапки, названные в честь вашей сборки (Product
или Company
+ имя сборки + версия). В этом коде я использую Application.CommonAppDataPath
. Выберите то, что вы считаете подходящим для вашего сценария.
- Я бы не стал (пытаться) хранить данные в пути к исполняемому файлу, вы можете обнаружить, что у вас нет прав доступа для записи данных туда. Конечно, вы можете предложить пользователю указать путь к хранилищу (с помощью SaveFileDialog или FolderBrowserDialog). Это еще один возможный выбор.
При первом запуске приложения этого пути не будет, но он будет создан, как только вы сохраните свои данные в этом месте: Файл. WriteAllText () , например, создает полный путь к файлу, если он еще не существует.
Обработчик btnSaveData.Click
вызывает SaveMyPasswords()
для сериализации и сохранения данных.
Предположим, что ваш DataTable построен ~ как в вашем OP (но дата является объектом DateTime):
Private theDataTable As DataTable
Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Dim dataPath = Path.Combine(Application.CommonAppDataPath, "myPasswords.json")
theDataTable = LoadMyPasswords(dataPath)
If theDataTable Is Nothing Then
theDataTable = New DataTable("MyPassowrds")
theDataTable.Columns.AddRange({
New DataColumn("Service", GetType(String)),
New DataColumn("Last Changed", GetType(Date)),
New DataColumn("Password", GetType(String))
})
End If
DataGridView1.DataSource = theDataTable
End Sub
Private Sub btnSaveData_Click(sender As Object, e As EventArgs) Handles btnSaveData.Click
Dim dataPath = Path.Combine(Application.CommonAppDataPath, "myPasswords.json")
SaveMyPasswords(dataPath, theDataTable)
End Sub
Private Function LoadMyPasswords(dataPath As String) As DataTable
If File.Exists(dataPath) Then
Return JsonConvert.DeserializeObject(Of DataTable)(File.ReadAllText(dataPath))
End If
Return Nothing
End Function
Private Sub SaveMyPasswords(dataPath As String, data As DataTable)
File.WriteAllText(dataPath, JsonConvert.SerializeObject(data))
End Sub