惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V2EX - 技术
V2EX - 技术
酷 壳 – CoolShell
酷 壳 – CoolShell
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
阮一峰的网络日志
阮一峰的网络日志
GbyAI
GbyAI
The Cloudflare Blog
小众软件
小众软件
MyScale Blog
MyScale Blog
IT之家
IT之家
H
Help Net Security
宝玉的分享
宝玉的分享
V
Visual Studio Blog
Hugging Face - Blog
Hugging Face - Blog
F
Fortinet All Blogs
博客园_首页
S
SegmentFault 最新的问题
MongoDB | Blog
MongoDB | Blog
The Hacker News
The Hacker News
有赞技术团队
有赞技术团队
Microsoft Security Blog
Microsoft Security Blog
Know Your Adversary
Know Your Adversary
Project Zero
Project Zero
P
Palo Alto Networks Blog
博客园 - 聂微东
罗磊的独立博客
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Engineering at Meta
Engineering at Meta
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
U
Unit 42
Spread Privacy
Spread Privacy
NISL@THU
NISL@THU
Cisco Talos Blog
Cisco Talos Blog
Last Week in AI
Last Week in AI
L
Lohrmann on Cybersecurity
J
Java Code Geeks
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Cyberwarzone
Cyberwarzone
G
Google Developers Blog
C
Cybersecurity and Infrastructure Security Agency CISA
大猫的无限游戏
大猫的无限游戏
Microsoft Azure Blog
Microsoft Azure Blog
L
LangChain Blog
The GitHub Blog
The GitHub Blog
Jina AI
Jina AI
Blog — PlanetScale
Blog — PlanetScale
C
Cyber Attacks, Cyber Crime and Cyber Security
L
LINUX DO - 热门话题
T
Tailwind CSS Blog
雷峰网
雷峰网
C
Cisco Blogs

博客园 - 南阳·源

ThinkPHP运算符与PHP运算符对照表 ThinkPHP常用配置路径 Asp.Net MVC3(三)-MvcApp实现全局异常捕获 Json数据字符串 反序列化对象时出现错误。遇到意外字符 ICSharpCode.SharpZipLib.dll压缩的zip包,7zip解压时出错 日期转换为中文日期 向大家推荐一款UI对话框框架artDialog Asp.Net MVC3(二)-过滤器定义 Asp.Net MVC3(一)-多Area时,路由设置问题 Json数据序列化对象,及对象序列化为Json格式 C# Enum转换 List<T> OrderBy问题 WCF访问安全 跨域访问WCF问题 [转] 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败 Split [转]RegistryKey 操作注册表 js控制ctrl+p sql:过滤字段中是否包含数字
序列化/反序化
南阳·源 · 2012-02-03 · via 博客园 - 南阳·源

在使用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);
}

}