我更改了示例代码,以便更轻松地将代码快速放入 C# 开发环境。我也故意不包括 using 语句 - 它只是示例代码。
对于示例,我们希望序列化以下类:
public class DataToSerialize
{
public string Name { get; set; }
}
如果我们尝试以您描述打印出“Same”的行的方式对其进行序列化和反序列化,则不会执行(我假设代码将使用 Environment.NewLine 在 Windows 上运行,替换为“\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");
}
现在将打印出相同的内容,除非我错了,否则您需要的行为是什么?