我用XmlSerializer序列化和反序列化一个类, 保存到XML中. 在这个类中有个含有换行的string属性, 在反序列化时换行丢失了, 如何解决?  我想一定有人遇到过. :)

解决方案 »

  1.   

    应当不会发生这种事情,你是不是存成文件,然后自己又去读取出来了?你直接看XmlSerializer出来的结果看看
      

  2.   

    你的换行符是如何输入的,你输入System.Environment.NewLine试试
      

  3.   

    to tiaoci(我挑刺,我快乐):
    我看了一下, 好像换行符(\n)没丢失, 是(\r)丢失了. 我开始在TextBox里敲一下回车后就会产生\r\n, 经过序列化和反序列化后再读到TextBox时\r丢失了, 光剩下\n了, 所以文本在TextBox里就不换行了.晕了, \r 怎么会丢失呢?
      

  4.   

    to oldhunter(老猎人) 你是不是把数据显示到TextBox再取回来了?TextBox本身会把回车符号去掉,你直接看序列化结果,不要显示到TextBox再取回来看我相信MS是不会在这种问题上犯糊涂的
      

  5.   

    TextBox中的回车是软回车,并不是\r\n
      

  6.   

    to tiaoci(我挑刺,我快乐):
    我试了, 如果不序列化保存的话就不会丢失 \r, 好像TextBox本身没有问题的.
    你可以调试时设断点看一来变量, 保存前会看到 \r\n, 保存后再打开就光能看到 \n了.其实如果用折中的办法解决的话, 可以在反序列化后把\n 都替换成 \r\n, 但不排除特殊情况下把本来需要的单个\n也给替换掉了. 
    但我想如果不是MS的BUG的话, 我还报有希望找出个正解, 呵呵, 欢迎大家一块讨论!
      

  7.   

    哦,其实我知道原因了,但是支持发三个贴,见鬼你只要使用自己创建的 XmlTextReader 就可以了
      

  8.   

    public static object XmlDeserialize(string xml, Type type, params Type [] extraTypes)
    {
      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就不会把回车去掉了