Я пытаюсь сохранить некоторые объекты в SQL Server Compact (SQL CE), сериализовав их с помощью средства форматирования SOAP.Сериализация, кажется, работает просто отлично, но когда я пытаюсь десериализовать объект, я получаю сообщение об ошибке: «1003 *
Есть незамеченная буквенная строка.Строка 53, позиция 72.
Кроме того, после перезапуска приложения при попытке заполнить набор данных я получаю следующую ошибку:
Не удалось включить ограничения.Одна или несколько строк содержат значения, нарушающие ненулевые, уникальные или ограничения внешнего ключа.
Все мои столбцы (кроме идентификатора) допускают нулевые значения и не являются уникальными, поэтому у меня нетИдея, откуда это исходит.Вот код моего сериализатора:
public static class Serializer
{
static public string Serialize(AssessmentReport theObject)
{
MemoryStream mStream = new MemoryStream();
SoapFormatter formatter = new SoapFormatter();
formatter.Serialize(mStream, theObject);
byte[] buffer = mStream.ToArray();
mStream.Close();
string value = Encoding.UTF8.GetString(buffer);
return value;
}
static public AssessmentReport Deserialize(string value)
{
byte[] buffer = Encoding.UTF8.GetBytes(value);
MemoryStream mStream = new MemoryStream(buffer);
SoapFormatter formatter = new SoapFormatter();
mStream.Position = 0;
AssessmentReport theReport = (AssessmentReport)formatter.Deserialize(mStream);
mStream.Close();
return theReport;
}
}
Вот как я называю сериализатор (theReport
- это экземпляр объекта, который нужно сериализовать):
examTableAdapter.UpdateAsmFile(Serializer.Serialize(theReport), examID);
И вотВот как я вызываю метод десериализации:
string value = Convert.ToString(examTableAdapter.GetAsmFile(2));
AsmReport theReport = Serializer.Deserialize(value)
Поле в базе данных SQL Server Compact, в котором сохраняется строка, имеет тип nvarchar
с пределом 3500.
Iпопытался использовать двоичный форматер, но при сериализации он всегда возвращает пустой буфер byte [].Мне действительно нужна глубокая сериализация, поэтому о XML-сериализаторе не может быть и речи.