如何将多行文本框的内容保存并加载为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>
但是这些断点在数据加载后不再显示。
新行的实际代码是什么?0x0A还是0x0D,还是两者都有?我以前也遇到过类似的问题。字符串中的字符"丢失"是因为文本框自己"转换"了它们(或者不理解它们)。基本上,您的xml文件可能以一种方式编码,而您的文本框使用其他编码,或者在读取或写入文件本身时丢失(您的字符串也可能在读取/写入文件期间"混乱")。所以在你不知情的情况下,你的字符串可能会在三个地方被篡改:
- 在写入文件期间(注意您使用的编码)
- 从文件 读取时当在文本框中显示字符串时。
我的建议是,你应该把你从文件中读取的文本分配给另一个字符串(未绑定),然后再把它分配给绑定的字符串,并使用调试器来检查它是如何变化的。这个http://home2.paulschou.net/tools/xlate/是一个有用的工具,可以检查究竟是在您的字符串中。
当我在应用程序中遇到这个问题时,我最终使用二进制/十六进制值的字符来写入/读取,然后在需要显示时将它们转换回来。但是我不得不使用很多奇怪的ASCII码。也许有更简单的解决办法。
编辑:或者它可能只是一些xml相关的东西。也许你应该使用一些其他字符来代替换行时,将它写入xml?