zoukankan      html  css  js  c++  java
  • 序列化/反序化

    在使用Web Service/WCF获取一组对象集合时,这时必须对返回的对象进行序列化.

    View Code
    public class SerializerHelper
    {
    /// <summary>
    /// 反序列化对象
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="dataString"></param>
    /// <param name="compress"></param>
    /// <returns></returns>
    public static T DeserializeObject<T>(string dataString, bool compress = true)
    {
    T obj = default(T);
    if (!string.IsNullOrEmpty(dataString))
    {
    if (!(string.IsNullOrEmpty(dataString) || !compress))
    {
    dataString = CompressionHelper.DeCompress(dataString);
    }
    using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(dataString)))
    {
    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
    obj = (T)ser.ReadObject(ms);
    ms.Close();
    }
    }
    return obj;
    }
    /// <summary>
    /// 反序列化对象
    /// </summary>
    /// <param name="serializeType"></param>
    /// <param name="dataString"></param>
    /// <param name="compress"></param>
    /// <returns></returns>
    public static object DeserializeObject(Type serializeType, string dataString, bool compress = true)
    {
    object obj = null;
    if (!string.IsNullOrEmpty(dataString))
    {
    if (!(string.IsNullOrEmpty(dataString) || !compress))
    {
    dataString = CompressionHelper.DeCompress(dataString);
    }
    using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(dataString)))
    {
    obj = new DataContractJsonSerializer(serializeType).ReadObject(ms);
    ms.Close();
    }
    }
    return obj;
    }
    /// <summary>
    /// 序列化对象
    /// </summary>
    /// <param name="obj"></param>
    /// <param name="compress"></param>
    /// <returns></returns>
    public static string SerializeObject(object obj, bool compress = true)
    {
    string result = "";
    if (obj != null)
    {
    using (MemoryStream ms = new MemoryStream())
    {
    new DataContractJsonSerializer(obj.GetType()).WriteObject(ms, obj);
    byte[] json = ms.ToArray();
    ms.Close();
    result = Encoding.UTF8.GetString(json, 0, json.Length);
    }
    if (!compress)
    {
    return result;
    }
    if (!string.IsNullOrEmpty(result))
    {
    result = CompressionHelper.Compress(result);
    }
    }
    return result;
    }
    /// <summary>
    /// 序列化对象
    /// </summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    public static byte[] SerializeObjectToByte(object obj)
    {
    byte[] result = null;
    string tempString = "";
    using (MemoryStream ms = new MemoryStream())
    {
    new DataContractJsonSerializer(obj.GetType()).WriteObject(ms, obj);
    byte[] json = ms.ToArray();
    ms.Close();
    tempString = Encoding.UTF8.GetString(json, 0, json.Length);
    }
    if (!string.IsNullOrEmpty(tempString))
    {
    result = CompressionHelper.CompressToByte(tempString);
    }
    return result;
    }


    压缩对象:

    View Code
    public class CompressionHelper
    {
    // Fields
    public static CompressionType CompressionProvider = CompressionType.GZip;

    // Methods
    public static byte[] Compress(byte[] bytesToCompress)
    {
    MemoryStream ms = new MemoryStream();
    Stream s = OutputStream(ms);
    s.Write(bytesToCompress, 0, bytesToCompress.Length);
    s.Close();
    return ms.ToArray();
    }

    public static string Compress(string stringToCompress)
    {
    return Convert.ToBase64String(CompressToByte(stringToCompress));
    }

    public static byte[] CompressToByte(string stringToCompress)
    {
    return Compress(Encoding.Unicode.GetBytes(stringToCompress));
    }

    public static string DeCompress(string stringToDecompress)
    {
    string outString = string.Empty;
    if (stringToDecompress == null)
    {
    throw new ArgumentNullException("stringToDecompress", "You tried to use an empty string");
    }
    try
    {
    byte[] inArr = Convert.FromBase64String(stringToDecompress.Trim());
    outString = Encoding.Unicode.GetString(DeCompress(inArr));
    }
    catch (NullReferenceException nEx)
    {
    return nEx.Message;
    }
    return outString;
    }

    public static byte[] DeCompress(byte[] bytesToDecompress)
    {
    byte[] writeData = new byte[0x1000];
    Stream s2 = InputStream(new MemoryStream(bytesToDecompress));
    MemoryStream outStream = new MemoryStream();
    while (true)
    {
    int size = s2.Read(writeData, 0, writeData.Length);
    if (size > 0)
    {
    outStream.Write(writeData, 0, size);
    }
    else
    {
    s2.Close();
    byte[] outArr = outStream.ToArray();
    outStream.Close();
    return outArr;
    }
    }
    }

    private static Stream InputStream(Stream inputStream)
    {
    switch (CompressionProvider)
    {
    case CompressionType.GZip:
    return new GZipInputStream(inputStream);

    case CompressionType.BZip2:
    return new BZip2InputStream(inputStream);

    case CompressionType.Zip:
    return new ZipInputStream(inputStream);
    }
    return new GZipInputStream(inputStream);
    }

    private static Stream OutputStream(Stream inputStream)
    {
    switch (CompressionProvider)
    {
    case CompressionType.GZip:
    return new GZipOutputStream(inputStream);

    case CompressionType.BZip2:
    return new BZip2OutputStream(inputStream);

    case CompressionType.Zip:
    return new ZipOutputStream(inputStream);
    }
    return new GZipOutputStream(inputStream);
    }

    }
  • 相关阅读:
    FlowPortal:流程节点定义有误,合流节点"合流"没有对应的聚焦节点
    FlowPortal 6.00c 使用xFormDesigner复制粘贴中文总是乱码
    SharePoint 2019 里安装FlowPortal6.00c报错
    与用户xxx一起提供的密码不正确。请确认输入的密码正确并重试
    SharePoint 2010 安装错误:请重新启动计算机,然后运行安装程序以继续
    SharePoint 2013: Workflow Manager Backend 服务意外地终止
    用户管理
    Linux及工具网站
    基于c开发的全命令行音频播放器
    Linux 下清空或删除大文件内容的 5 种方法
  • 原文地址:https://www.cnblogs.com/snlfq2000/p/2337202.html
Copyright © 2011-2022 走看看