Сериализация datatable бросает странное исключение - PullRequest
0 голосов
/ 06 ноября 2018

Я хочу сериализовать Datatable, содержащий несколько других таблиц данных. В прошлом у меня никогда не было проблем с этим кодом:

System.IO.FileStream file = new System.IO.FileStream(fName, System.IO.FileMode.CreateNew);
System.IO.StreamWriter writer = new System.IO.StreamWriter(file);
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();

try{
    bf.Serialize(writer.BaseStream, dt);
}catch(System.Exception ex){throw new System.Exception("Error serializing data stack!" + System.Environment.NewLine + "Error details: " + ex.Message);}

writer.Close();
writer.Dispose();

file.Close();
file.Dispose();

Но на этот раз я получаю исключение со странным текстом (извините - только что получил на немецком языке):

Ошибка сериализации стека данных! Детали ошибки: Das Ersatzzeichenpaar (0xDB8C, 0xAD3) ist ungültig. Эйн Хоес Эрсаццейхен (0xD800 - 0xDFFFF) Муссетс Мейтс Нидриген Эрсаццейхен (0xDC00 - 0xDFFF) Эйн Паар билден.

Вы можете перевести это с:

Неверный символ замены (0xDB8C, 0xAD3). Символ высокой замены всегда должен сочетаться с символом низкой замены (0xDC00 - 0xDFFF) .`

Я действительно понятия не имею, что это может означать при использовании средства форматирования binare.

1 Ответ

0 голосов
/ 06 ноября 2018

Одна из записей в таблице данных имеет недопустимый символ Unicode в текстовом поле. Попробуйте изолировать его, отфильтровывая записи одну за другой.

В цикле создайте новую таблицу данных только с одной записью для каждой записи в таблице данных. Попробуйте сериализовать одиночную запись DT. Посмотрите, на какой записи это не удастся. Затем изучите запись и посмотрите, что не так.

...