发生这种情况是因为您使用的是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);
}
}
}
}