我有一个多行文本框,我使用数据绑定将其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>
但是在加载数据后,这些中断不再显示。
答案 0 :(得分:1)
新线路的实际代码是什么? 0x0A或0x0D或两者兼而有之?我之前偶然发现了类似的问题。字符串中的字符“丢失”,因为文本框自己“转换”它们(或者不理解它们)。基本上,您的xml文件可能是单向编码的,并且您的文本框使用其他编码,或者在读取或写入文件本身时丢失(在读取/写入文件期间,您的字符串可能会“混乱”) )。因此,在您不知情的情况下,您的字符串可能有3个位置被篡改:
我的建议是,在将文件分配给绑定字符串之前,应将从文件中读取的文本分配给另一个字符串(未绑定),并使用调试器检查其更改方式。这个http://home2.paulschou.net/tools/xlate/是检查字符串中完全的有用工具。
当我在我的应用程序中遇到此问题时,我最终使用二进制/十六进制字符值进行写入/读取,然后在需要显示时将其转换回来。但我不得不使用很多奇怪的ASCII代码。也许那里有一个更简单的解决方案。
编辑:或者它可能只是一些与xml相关的东西。也许在将其写入xml时,你应该使用其他一些字符代替换行符吗?