Я изменил пример кода, чтобы было проще быстро поместить код в среду разработки C #. Я также намеренно не включил использование операторов - это только пример кода.
Для примера у нас есть следующий класс, который мы хотим сериализовать:
public class DataToSerialize
{
public string Name { get; set; }
}
Если мы попытаемся сериализовать и десериализовать это так, как вы описываете строку, где выводится «Same», то не будет выполняться (я предполагаю, что код будет работать в Windows с Environment.NewLine, замените на «\ r \ n "если вы не):
DataToSerialize test = new DataToSerialize();
test.Name = "TestData" + Environment.NewLine;
XmlSerializer configSerializer = new XmlSerializer(typeof(DataToSerialize));
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms);
configSerializer.Serialize(sw, test);
ms.Position = 0;
DataToSerialize deserialized = (DataToSerialize)configSerializer.Deserialize(ms);
if (deserialized.Name.Equals("TestData" + Environment.NewLine))
{
Console.WriteLine("Same");
}
Однако это можно исправить, вручную назначив сериализатору XmlTextReader с его свойством Normalization, установленным в false (свойство, используемое по умолчанию в сериализаторе, установлено в true):
DataToSerialize test = new DataToSerialize();
test.Name = "TestData" + Environment.NewLine;
XmlSerializer configSerializer = new XmlSerializer(typeof(DataToSerialize));
MemoryStream ms = new MemoryStream();
StreamWriter sw = new StreamWriter(ms);
configSerializer.Serialize(sw, test);
ms.Position = 0;
XmlTextReader reader = new XmlTextReader(ms);
reader.Normalization = false;
DataToSerialize deserialized = (DataToSerialize)configSerializer.Deserialize(reader);
if (deserialized.Name.Equals("TestData" + Environment.NewLine))
{
Console.WriteLine("Same");
}
То же самое теперь будет распечатывать, что, если я не ошибаюсь, то поведение, которое вам требуется?