我用XmlSerializer序列化和反序列化一个类, 保存到XML中. 在这个类中有个含有换行的string属性, 在反序列化时换行丢失了, 如何解决? 我想一定有人遇到过. :)
解决方案 »
- 求个 DLLImport 例程
- 关于C#的Type类的问题
- 取色,像素问题:取出屏幕上某点的色值,这个色值跟什么有关系,显卡,操作系统,显示器的尺寸?
- 如何得到数据库表中某行某列的值?
- 各位高手,小弟有两个问题要请教......
- C#怎么给斑马打印机GK888t发送DataGridview里个一行记录,然后打印
- PHP代码怎么转换成C#呀?
- 写了一个库,如何使其他项目能用到这个库的最新版本
- 在WINFROM中显示标注功能
- 我在form1中添加了button1按钮,怎样写使得单击button1后form1重新load一次?
- 问个丢人的问题,HOHO!谁帮我写一句上来。
- 在WinForm中,保存完毕以后,如何让所有的TextBox的Text恢复默认值?
我看了一下, 好像换行符(\n)没丢失, 是(\r)丢失了. 我开始在TextBox里敲一下回车后就会产生\r\n, 经过序列化和反序列化后再读到TextBox时\r丢失了, 光剩下\n了, 所以文本在TextBox里就不换行了.晕了, \r 怎么会丢失呢?
我试了, 如果不序列化保存的话就不会丢失 \r, 好像TextBox本身没有问题的.
你可以调试时设断点看一来变量, 保存前会看到 \r\n, 保存后再打开就光能看到 \n了.其实如果用折中的办法解决的话, 可以在反序列化后把\n 都替换成 \r\n, 但不排除特殊情况下把本来需要的单个\n也给替换掉了.
但我想如果不是MS的BUG的话, 我还报有希望找出个正解, 呵呵, 欢迎大家一块讨论!
{
XmlSerializer serializer = new XmlSerializer(type, extraTypes);
using(MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(xml)))
{
using(XmlTextReader reader = new XmlTextReader(stream))
{
reader.Normalization = false;
return serializer.Deserialize(reader);
}
}
}注意一定要创建出一个 XmlTextReader出来,因为MS默认的 reader.Normalization = true设置成false就不会把回车去掉了