Почему сериализация XML предлагается через SOAP и двоичную сериализацию? - PullRequest
1 голос
/ 12 августа 2010

Я пытаюсь сериализовать строку с некоторыми управляющими символами (\ 0).Но когда я десериализую, это вызывает исключение.

//XML serialization

    private static void M1()
        {
            string str = "\0AC";

           StringWriter sw = new StringWriter();
            XmlSerializer serializer = new XmlSerializer(typeof(String));
            serializer.Serialize(sw, str);
            System.Console.WriteLine("String encoded to XML = \n{0} \n", sw.ToString());
            StringReader sr = new StringReader(sw.ToString());
            String s2 = (String)serializer.Deserialize(sr);

            System.Console.WriteLine("String decoded from XML = \n {0}", s2);
        }

//Using Binary serialization

    void BinaryFormat1()
     {
         IFormatter bf = new BinaryFormatter();
         string str = "\0MyName";
         FileStream fs = new FileStream("SerilizedString.Data", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);
         bf.Serialize(fs, str);
         fs.Close();
         fs = new FileStream("SerilizedString.Data", FileMode.Open, FileAccess.Read, FileShare.None);
         string data = (string)bf.Deserialize(fs);
         fs.Close();
         Console.WriteLine("data : " + data.ToString());
     }

1 Ответ

3 голосов
/ 12 августа 2010

Я бы ожидал, что у SOAP такая же проблема, если честно. Это проблема невозможности представить каждую строку Юникода в «стандартном» XML.

Это оставляет двоичную сериализацию, которая:

  • Будет работать только с .NET (что плохо для совместимости)
  • Не читается человеком (или легко переводится в читабельную форму, если у вас возникают проблемы)
  • Трудно работать с точки зрения управления версиями

Лично я предпочитаю настраиваемые параметры сериализации, такие как Thrift или Protocol Buffers, но, как автор порта Port Buffers на C #, я предвзят: :)

...