2014-09-30 74 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); 
      } 
     } 
    } 
} 
相关问题