如何将多行文本框的内容保存并加载为XML

本文关键字:保存 加载 XML 文本 | 更新日期: 2023-09-27 18:09:53

我有一个多行文本框,我使用数据绑定将其Text属性绑定到一个字符串。这似乎可以工作,但是在从XML加载字符串时,返回(新行)丢失了。当我检查XML时,返回值在那里,但是一旦从XML加载字符串,它们就丢失了。有人知道为什么会发生这种情况,以及如何正确处理吗?

(我并不一定要使用多行文本框或字符串属性进行绑定,我只是一个可维护的(最好是优雅的)解决方案。)

编辑:基本上,我使用XmlSerializer类: 加载:

using (StreamReader streamReader = new StreamReader(fileName))
{
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
    return (T)xmlSerializer.Deserialize(streamReader);
}
拯救:

using (StreamWriter streamWriter = new StreamWriter(fileName))
{
   Type t = typeof(T);
   XmlSerializer xmlSerializer = new XmlSerializer(t);
   xmlSerializer.Serialize(streamWriter, data);
}

当查看XML内部时,它像这样保存多行文本框数据:

<OverriddenComponent>
   <overrideInformation>
          <Comments>first rule
second rule
third rule</Comments>
    </overrideInformation>
</OverriddenComponent>

但是这些断点在数据加载后不再显示。

如何将多行文本框的内容保存并加载为XML

新行的实际代码是什么?0x0A还是0x0D,还是两者都有?我以前也遇到过类似的问题。字符串中的字符"丢失"是因为文本框自己"转换"了它们(或者不理解它们)。基本上,您的xml文件可能以一种方式编码,而您的文本框使用其他编码,或者在读取或写入文件本身时丢失(您的字符串也可能在读取/写入文件期间"混乱")。所以在你不知情的情况下,你的字符串可能会在三个地方被篡改:

  1. 在写入文件期间(注意您使用的编码)
  2. 从文件
  3. 读取时当在文本框中显示字符串时。

我的建议是,你应该把你从文件中读取的文本分配给另一个字符串(未绑定),然后再把它分配给绑定的字符串,并使用调试器来检查它是如何变化的。这个http://home2.paulschou.net/tools/xlate/是一个有用的工具,可以检查究竟是在您的字符串中。

当我在应用程序中遇到这个问题时,我最终使用二进制/十六进制值的字符来写入/读取,然后在需要显示时将它们转换回来。但是我不得不使用很多奇怪的ASCII码。也许有更简单的解决办法。

编辑:或者它可能只是一些xml相关的东西。也许你应该使用一些其他字符来代替换行时,将它写入xml?