2010-08-12 88 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