При десериализации из SQL Server Compact выдается «Незамеченная литеральная строка». ошибка - PullRequest
2 голосов
/ 02 декабря 2010

Я пытаюсь сохранить некоторые объекты в 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-сериализаторе не может быть и речи.

1 Ответ

1 голос
/ 20 февраля 2011

Хорошо, вот этот я пытаюсь выяснить уже более двух месяцев. Хотя я не смог найти логического решения проблемы, похоже, что изменение кодировки на utf7 решило проблему. Я не могу придумать причину, по которой это может быть проблемой, но, похоже, она специфична для моей машины (у меня наконец появилась возможность запустить код на другом компьютере, и он отлично работал с utf8).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...