C#将通用列表序列化为文件

我有一个类,其中包含有关图片的信息,如filepath,hashvalue,bytes。 在另一个类中,我得到了一个通用列表,其中我放置了包含图片信息的类中的对象。

该类看起来像这样:

[Serializable()] class PicInfo : ISerializable { public string fileName { get; set; } public string completeFileName { get; set; } public string filePath { get; set; } public byte[] hashValue { get; set; } public PicInfo() { } public PicInfo(SerializationInfo info, StreamingContext ctxt) { this.fileName = (string)info.GetValue("fileName", typeof(string)); this.completeFileName = (string)info.GetValue("completeFileName", typeof(string)); this.filePath = (string)info.GetValue("filePath", typeof(string)); this.hashValue = (byte[])info.GetValue("hashValue", typeof(byte[])); } public void GetObjectData(SerializationInfo info, StreamingContext ctxt) { info.AddValue("fileName", this.fileName); info.AddValue("completeFileName", this.completeFileName); info.AddValue("filePath", this.filePath); info.AddValue("hashValue", this.hashValue); } } 

我的列表只是list pi = new list(); 序列化这个列表最简单的方法是什么?

如果你想使用BinaryFormatter (我真的不建议),你可以使用:

 [Serializable] class PicInfo { public string fileName { get; set; } public string completeFileName { get; set; } public string filePath { get; set; } public byte[] hashValue { get; set; } public PicInfo() { } } static class Program { static void Main() { List pi = new List(); pi.Add(new PicInfo {fileName = "foo.bar", hashValue = new byte[] {1, 2, 3}}); var ser = new BinaryFormatter(); using (var ms = new MemoryStream()) { ser.Serialize(ms, pi); var bytes = ms.ToArray(); } } } 

如果你想使用XmlSerializer (可能更喜欢IMO),但需要byte[] ,那么:

 public class PicInfo { public string fileName { get; set; } public string completeFileName { get; set; } public string filePath { get; set; } public byte[] hashValue { get; set; } public PicInfo() { } } static class Program { static void Main() { List pi = new List(); pi.Add(new PicInfo {fileName = "foo.bar", hashValue = new byte[] {1, 2, 3}}); var ser = new XmlSerializer(typeof(List)); using (var ms = new MemoryStream()) { ser.Serialize(ms, pi); var bytes = ms.ToArray(); } } } 

就个人而言,我使用protobuf-net:

 [ProtoContract] public class PicInfo { [ProtoMember(1)]public string fileName { get; set; } [ProtoMember(2)]public string completeFileName { get; set; } [ProtoMember(3)]public string filePath { get; set; } [ProtoMember(4)]public byte[] hashValue { get; set; } public PicInfo() { } } static class Program { static void Main() { List pi = new List(); pi.Add(new PicInfo {fileName = "foo.bar", hashValue = new byte[] {1, 2, 3}}); using (var ms = new MemoryStream()) { Serializer.Serialize(ms, pi); var bytes = ms.ToArray(); } } } 

尺寸:

  • BinaryFormatter :488个字节
  • XmlSerializer :251个字节
  • protobuf-net:16个字节