Я создаю службу заказа SMS для ресторана, и у меня возникают трудности с сохранением файла Datatable в файле, который затем загружается при перезапуске программы ,Сохраните DataTable в файл, где указан тип столбца (KeyValuePair ...)
В моей таблице содержится столбец с именем «MessageHistory» с типом списка (KeyValuePair), который сохраняется как пустой.
Моя таблица выглядит следующим образом:
Clients.Columns.AddRange(New DataColumn() {
New DataColumn("CodedPhoneNumber", GetType(String)),
New DataColumn("FriendlyPhoneNumber", GetType(String)),
New DataColumn("Name", GetType(String)),
New DataColumn("CurrentOrder", GetType(String)),
New DataColumn("OrderHistory", GetType(String)),
New DataColumn("TabBalance", GetType(Int32)),
New DataColumn("MessageHistory", GetType(List(Of KeyValuePair(Of DateTime, String))))})
таблица сохраняется в файл:
Dim stream As New System.IO.MemoryStream()
Dim formatter As System.Runtime.Serialization.IFormatter = New System.Runtime.Serialization.Formatters.Binary.BinaryFormatter()
formatter.Serialize(stream, Clients)
Dim TableBytes As Byte() = stream.GetBuffer()
File.WriteAllBytes(FilePath, TableBytes)
До сохранения, моя колонка с KeyValuePairs выглядит примерно так (К сожалению, нет достаточно репутация вставлять картинки пока):
файл, как он сохраняется, регистрирует этот столбец как:
<MessageHistory xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<KeyValuePairOfDateTimeString />
<KeyValuePairOfDateTimeString />
<KeyValuePairOfDateTimeString />
<KeyValuePairOfDateTimeString />
</MessageHistory>
Поскольку XML является пустым, при загрузке таблицы обратно в программу копирует каждую запись в качестве значения по умолчанию Datetime с ничего.
Итак, мой вопрос в том, есть ли лучший способ сохранить таблицу, учитывая, что столбцы не состоят просто из одномерных буквенно-цифровых значений (все остальные столбцы сохраняют и загружают в порядке)?
Как моя программа развивается, вполне возможно, что эта таблица будет включать в себя другие типы столбцов массива.
Благодарности Ребята
попробовать это:. Clients.WriteXml («имя файла», XmlWriteMode.WriteSchema); – jdweng
DataTable кажется странным выбор, что причина, что Есть несколько вопросов с кодом сериализации? – Plutonix
Вы можете использовать простой POCO o bject и использовать сериализацию JSON, которая будет более эффективной. –