Я просматривал статьи, чтобы больше узнать о сериализаторе datacontractserializer и двоичном форматере. Основываясь на сделанном до сих пор чтении, у меня сложилось впечатление, что двоичный форматер должен занимать меньше места, чем datacontractserializer. Причина в том, что DataContractSerializer сериализуется в информационный набор xml, в то время как двоичный форматер сериализуется в закрытый двоичный формат.
Следующий тест
[Serializable]
[DataContract]
public class Packet
{
[DataMember]
public DataSet Data { get; set; }
[DataMember]
public string Name { get; set; }
[DataMember]
public string Description { get; set; }
}
DataSet был заполнен 121317
строками из [AdventureWorks].[Sales].[SalesOrderDetail]
таблицы
using (var fs = new FileStream("test1.txt", FileMode.Create))
{
var dcs = new DataContractSerializer(typeof(Packet));
dcs.WriteObject(fs, packet);
Console.WriteLine("Total bytes with dcs = " + fs.Length);
}
using(var fs = new FileStream("test2.txt", FileMode.Create))
{
var bf = new BinaryFormatter();
bf.Serialize(fs, packet);
Console.WriteLine("Total bytes with binaryformatter = " + fs.Length);
}
Results
Total bytes with dcs = 57133023
Total bytes with binaryformatter = 57133984
Вопрос
Почему количество байт для двоичного формата больше, чем для datacontractserializer? Разве это не должно быть намного меньше?