2011-09-27 47 views
0

我有一个多行文本框,我使用数据绑定将其Text属性绑定到一个字符串。这似乎工作,但从XML加载字符串时,返回(新行)会丢失。当我检查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中寻找,这样可以节省多行TextBox的数据是这样的:

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

但那些断加载数据后不再会显示。

+1

请告诉我们您正在使用保存和加载XML的代码。在XML –

+0

,倍数空间(和换行符),默认情况下,跳过 –

回答

1

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

  1. 在写入文件(需要注意你用什么编码)
  2. 在从文件
  3. 读取数据时显示您的字符串在文本框中。

我的建议是,您应该将您从文件中读取的文本分配给另一个字符串(未绑定),然后再将其分配给绑定的字符串,并使用调试器检查其更改方式。这http://home2.paulschou.net/tools/xlate/是一个有用的工具来检查什么确切是在你的字符串。

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

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

相关问题