發生這種情況是因爲您使用的是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);
}
}
}
}