Я пытаюсь сериализовать простой объект (5 строковых свойств) в XML, чтобы сохранить его в поле изображения БД. Затем мне нужно десериализовать его обратно в строку позже в программе.
Тем не менее, я получаю некоторые ошибки - вызванные сохранением XML, думая, что он находится в UTF-16 - однако, когда я загружаю его из БД обратно в строку - он думает, что это строка UTF 8.
Я получаю ошибку
- InnerException {"Отсутствует метка порядка байтов в Юникоде. Невозможно переключиться в Юникод."} System.Exception {System.Xml.XmlException}
- Сообщение «Ошибка в XML-документе (0, 0).» строка
Это происходит из-за двух разных способов сохранения и загрузки строки в / из БД? При сохранении я использую StringBuilder, но при загрузке из БД я использую только строку.
Мысли?
Сериализация и сохранение в БД
// Now Save the OBject XML to the Query Tables
var serializer = new XmlSerializer(ExportConfig.GetType());
StringBuilder StringResult = new StringBuilder();
using (var writer = XmlWriter.Create(StringResult))
{
serializer.Serialize(writer, ExportConfig);
}
//MessageBox.Show("XML : " + StringResult);
// Now Save to the Query
try
{
string UpdateSQL = "Update ZQryRpt "
+ " Set ExportConfig = " + TAGlobal.QuotedStr(StringResult.ToString())
+ " where QryId = " + TAGlobal.QuotedStr(((DataRowView)bindingSource_zQryRpt.Current).Row["QryID"].ToString())
;
ExecNonSelectSQL(UpdateSQL, uniConnection_Config);
}
catch (Exception Error)
{
MessageBox.Show("Error Setting ExportConfig: " + Error.Message);
}
Загрузка из БД и десериализация
byte[] binaryData = (byte[])((DataRowView)bindingSource_zQryRpt.Current).Row["ExportConfig"];
string XMLStored = System.Text.Encoding.UTF8.GetString(binaryData, 0, binaryData.Length);
if (XMLStored.Length > 0)
{
IIDExportObject ExportConfig = new IIDExportObject();
var serializer = new XmlSerializer(ExportConfig.GetType());
//StringBuilder StringResult = new StringBuilder(XMLStored);
// Load the XML from the Query into the StringBuilder
// Now we need to build a Stream from the String to use in the XMLReader
byte[] byteArray = Encoding.UTF8.GetBytes(XMLStored);
MemoryStream stream = new MemoryStream(byteArray);
using (var reader = XmlReader.Create(stream))
{
ExportConfig = (IIDExportObject)serializer.Deserialize(reader);
}
}