gpt4 book ai didi

c# - XML反序列化 'standardising'行尾,如何停止? (。网)

转载 作者:数据小太阳 更新时间:2023-10-29 01:43:02 24 4
gpt4 key购买 nike

我有一个带有标记为 [XmlText] 的属性的类,它接受多行输入。在我的 XML 文件中,我已验证文本内容中的行结尾实际上是 "\r\n",与文件的其余部分相同。

我用来反序列化的代码是:

XmlSerializer configSerializer = new XmlSerializer(typeof(WorldList));
string file = "test.xml";

if (File.Exists(file))
{
using (TextReader r = new StreamReader(file))
{
foo = configSerializer.Deserialize(r);
}
}

但是,在 [XmlText] 属性的 setter 中,value 已经以 "\n" 作为行尾。这很烦人的主要原因是 "\n" 行尾在 TextBox 中显示不正确...我不确定是哪一部分导致了问题,但我认为这里的某个人可能能够阐明这种情况。

最佳答案

我更改了示例代码,以便更轻松地将代码快速放入 C# 开发环境。我还特意不包含 using 语句 - 它只是示例代码。

例如,我们有以下我们希望序列化的类:

   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");
}

现在将打印出来,除非我错了,否则这就是您需要的行为吗?

关于c# - XML反序列化 'standardising'行尾,如何停止? (。网),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1115459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com