【问题标题】:How to save and load the contents of a multiline textbox to XML?如何将多行文本框的内容保存并加载到 XML?
【发布时间】:2011-11-25 21:16:06
【问题描述】:

我有一个多行文本框,我使用数据绑定将其 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 的代码。
  • 在xml中,默认跳过多个空格(和换行符)

标签: c# textbox


【解决方案1】:

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

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

我的建议是,您应该先将从文件中读取的文本分配给另一个字符串(未绑定),然后再将其分配给绑定的字符串,并使用调试器检查它的变化情况。这个http://home2.paulschou.net/tools/xlate/ 是一个有用的工具,可以检查您的字符串中确切的内容。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    相关资源
    最近更新 更多