我使用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 :(得分:0)
这是因为您使用的是BINARY格式化程序,它以二进制形式存储数据。
因此,例如,当存储字符串时,它可以在原始字符串前面加上字符串的长度作为二进制32位数字 - 这将导致4个字节不代表字符(并将显示&#34 ;丑陋的字符"在文本编辑器中)。
如果您需要人类可读的序列化版本,则应使用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);
}
}
}
}