我正在寻找序列化和反序列化.NET对象的最快方法。这是我到目前为止的内容:
public class TD { public List<CT> CTs { get; set; } public List<TE> TEs { get; set; } public string Code { get; set; } public string Message { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } public static string Serialize(List<TD> tData) { var serializer = new XmlSerializer(typeof(List<TD>)); TextWriter writer = new StringWriter(); serializer.Serialize(writer, tData); return writer.ToString(); } public static List<TD> Deserialize(string tData) { var serializer = new XmlSerializer(typeof(List<TD>)); TextReader reader = new StringReader(tData); return (List<TD>)serializer.Deserialize(reader); } }
这是您使用protobuf-net的模型(已发明CT和TE)(但仍保留了使用的能力,这可能很有用-特别是对于迁移);我谦虚地提出(如果需要的话,有很多证据)这 是 .NET中最快的(或者肯定是最快的)通用串行器之一。XmlSerializer __
CT
TE
XmlSerializer
如果需要字符串,只需将base-64编码即可。
[XmlType] public class CT { [XmlElement(Order = 1)] public int Foo { get; set; } } [XmlType] public class TE { [XmlElement(Order = 1)] public int Bar { get; set; } } [XmlType] public class TD { [XmlElement(Order=1)] public List<CT> CTs { get; set; } [XmlElement(Order=2)] public List<TE> TEs { get; set; } [XmlElement(Order = 3)] public string Code { get; set; } [XmlElement(Order = 4)] public string Message { get; set; } [XmlElement(Order = 5)] public DateTime StartDate { get; set; } [XmlElement(Order = 6)] public DateTime EndDate { get; set; } public static byte[] Serialize(List<TD> tData) { using (var ms = new MemoryStream()) { ProtoBuf.Serializer.Serialize(ms, tData); return ms.ToArray(); } } public static List<TD> Deserialize(byte[] tData) { using (var ms = new MemoryStream(tData)) { return ProtoBuf.Serializer.Deserialize<List<TD>>(ms); } } }