2014-09-30 78 views
0

後,我用this代碼序列化我的對象使字符串屬性不可讀對象序列化

public static void SerializeObject(string filename, MyObject objectToSerialize) 
{ 
    Stream stream = File.Open(filename, FileMode.Create); 
    BinaryFormatter bformatter = new BinaryFormatter(); 

    bformatter.Serialize(stream, objectToSerialize); 
    stream.Close();    
} 

序列化和反序列化工作正常,但我想知道我怎麼可以使用序列使對象的字符串屬性使不可讀。現在,在用戶在文本編輯器中打開文件的序列化後,字符串屬性在其他難看的字符之間是可讀的。

回答

0

發生這種情況是因爲您使用的是BINARY格式器,它以二進制形式存儲數據。

所以,例如,當存儲一個字符串時,它可能會以字符串的長度作爲二進制32位數字前綴原始字符串 - 這將導致4個字節不代表字符(並顯示「醜陋字符「在文本編輯器中)。

如果你想要一個人類可讀的序列化版本,你應該使用XML序列化。

下面是一個示例控制檯應用程序,演示如何二進制序列化,以及兩種方式的XML序列化同一類:

using System; 
using System.IO; 
using System.Runtime.Serialization; 
using System.Runtime.Serialization.Formatters.Binary; 
using System.Xml; 
using System.Xml.Serialization; 

namespace Demo 
{ 
    [Serializable] 
    public class Test 
    { 
     public string Text; 
     public int Number; 
    } 

    internal class Program 
    { 
     private static void Main() 
     { 
      var test = new Test {Text = "Some text", Number = 12345 }; 

      // Creates a binary file: 

      using (var stream = File.Create(@"c:\\test\\test.bin")) 
      { 
       var formatter = new BinaryFormatter(); 
       formatter.Serialize(stream, test); 
      } 

      // Creates an XML file using XmlSerializer: 

      using (var stream = File.Create(@"c:\\test\\test1.xml")) 
      { 
       var formatter = new XmlSerializer(typeof(Test), defaultNamespace : ""); 
       formatter.Serialize(stream, test); 
      } 

      // Creates an XML file using XmlWriter and DataContractSerializer: 

      DataContractSerializer serializer = new DataContractSerializer(test.GetType()); 

      using (var streamWriter = File.CreateText(@"c:\\test\\test2.xml")) 
      using (var xmlWriter = XmlWriter.Create(streamWriter, new XmlWriterSettings { Indent = true })) 
      { 
       serializer.WriteObject(xmlWriter, test); 
      } 
     } 
    } 
} 
相關問題