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

标签 c# xml xml-serialization newline

我有一个带有标记为 [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/

相关文章:

c# - 如何一次刷新 .net 配置的所有部分或如何遍历它们?

c# - 初始化时触发自定义 DependencyProperty 的 PropertyChangedCallback

.net - 将空元素反序列化为 null

c# - 使用 'Paste XML as Classes' 反序列化 Web API 剩余响应

c# - 从 WebBrowser 中的 HTML 元素获取属性值

c# - Entity Framework Code First Foreign Key 添加索引也是如此

java - 如何在 Android 上使用 tabHost

android - 如何解决org.simpleframework.xml.core.ValueRequiredException : Unable to satisfy @org. simpleframework.xml.ElementList()

java - Hibernate xml 文件问题

c# - 创建符合 XSD 架构的 XML 文档的最佳方法是什么?