2010-08-12 35 views
1

我试图用一些转义字符(\ 0)序列化一个字符串。但是,当我反序列化它会引发异常。为什么XML序列化建议通过SOAP和二进制序列化?

//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

@ starz26 - 什么样的异常? – CoderHawk 2010-08-12 06:49:12

+2

你的问题描述有哪些主题? – Gopi 2010-08-12 06:50:01

+0

因为这个异常我试图使用其他序列化类型。可以使用二进制吗? – myWorld 2010-08-12 08:39:02

回答

3

我希望SOAP有同样的问题,说实话。这是无法用“标准”XML表示每个Unicode字符串的问题。

这使得二进制序列,其中:

  • 将只使用.NET工作(这样是不好的互操作性)
  • 不是人类可读的(或容易转化为如果你运行一个人类可读的形式成问题)
  • 很难来讲一起工作版本

我个人更喜欢自定义序列化选项,比如节俭或协议缓冲区,但作为一个公关的作者协议缓冲区端口到C#,我很偏向:)

+0

当我试图使用二进制序列化应用程序doesnt抛出异常,但它不显示任何输出 – myWorld 2010-08-13 06:31:34

+0

@ starz26:使用您的确切代码,它显示输出罚款给我。尝试从控制台*运行*。如果你是从Visual Studio之类的东西运行它,那么“\ 0”可能会混淆Windows窗口小部件,它通常将其视为“字符串结尾”。 – 2010-08-13 06:36:13

+0

还有另一个应用程序从我的应用程序中获取输入。在这种情况下,我的非输出输出是另一个应用程序的输入。因此,它意味着我的输出数据将转到另一个应用程序。是的我使用视觉工作室来看看这个工作 – myWorld 2010-08-24 07:55:45

相关问题