最快序列化和反序列化.NET对象的方式 [英] Fastest way to serialize and deserialize .NET object

查看:168
本文介绍了最快序列化和反序列化.NET对象的方式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

即时寻找序列化和反序列化.NET对象的最快方式。以下是我迄今为止...

 公共类TD
{
    公开名单< CT>电流互感器{获得;组; }
    公开名单< TE>转座因子{获得;组; }
    公共字符串code {获得;组; }
    公共字符串信息{获得;组; }
    公开日期时间起始日期{获得;组; }
    公共DateTime的结束日期{获得;组; }

    公共静态字符串序列化(名单< TD> TDATA)
    {
        无功序列化=新的XmlSerializer(typeof运算(名单< TD>));

        TextWriter的作家=新的StringWriter();
        serializer.Serialize(作家,TDATA);

        返回writer.ToString();
    }

    公共静态列表< TD>反序列化(字符串TDATA)
    {
        无功序列化=新的XmlSerializer(typeof运算(名单< TD>));

        TextReader的读者=新StringReader(TDATA);

        返程(名单< TD>)serializer.Deserialize(读卡器);
    }
}
 

解决方案

这是你的模型(以发明 CT TE )使用 protobuf网(但保留能够使用 XmlSerializer的,这可能是有用的 - 尤其是用于迁移);我谦恭地提出(与大量的证据,如果你需要的话),这的的最快(或当然是一个最快的)通用串行在.NET。

如果您需要的字符串,只是基于64位的连接code中的二进制文件。

  [XmlType将]
公共类CT {
    [的XmlElement(ORDER = 1)]
    公众诠释富{获得;组; }
}
[XmlType将]
公共类TE {
    [的XmlElement(ORDER = 1)]
    公众诠释吧{获得;组; }
}
[XmlType将]
公共类TD {
    [的XmlElement(ORDER = 1)]
    公开名单< CT>电流互感器{获得;组; }
    [的XmlElement(顺序= 2)]
    公开名单< TE>转座因子{获得;组; }
    [的XmlElement(顺序= 3)]
    公共字符串code {获得;组; }
    [的XmlElement(ORDER = 4)]
    公共字符串信息{获得;组; }
    [的XmlElement(ORDER = 5)]
    公开日期时间起始日期{获得;组; }
    [的XmlElement(顺序= 6)]
    公共DateTime的结束日期{获得;组; }

    公共静态byte []的序列化(名单< TD> TDATA){
        使用(VAR毫秒=新的MemoryStream()){
            ProtoBuf.Serializer.Serialize(MS,TDATA);
            返回ms.ToArray();
        }
    }

    公共静态列表< TD>反序列化(byte []的TDATA){
        使用(VAR毫秒=新的MemoryStream(TDATA)){
            返回ProtoBuf.Serializer.Deserialize<列表< TD>>(毫秒);
        }
    }
}
 

im looking for the fastest way to serialize and deserialize .NET object. Here is what i have so far...

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);
    }        
}

解决方案

Here's your model (with invented CT and TE) using protobuf-net (yet retaining the ability to use XmlSerializer, which can be useful - in particular for migration); I humbly submit (with lots of evidence if you need it) that this is the fastest (or certainly one of the fastest) general purpose serializer in .NET.

If you need strings, just base-64 encode the binary.

[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);
        }
    }
}

这篇关于最快序列化和反序列化.NET对象的方式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆