C#序列化总结
贴一下自己序列化的代码:
public class XMLUtil
{
/// <summary>
/// XML & Datacontract Serialize & Deserialize Helper
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="serialObject"></param>
/// <returns></returns>
public static string Serializer<T>(T serialObject) where T : class
{
string result = string.Empty;
using (MemoryStream mem = new MemoryStream())
{
using (XmlTextWriter writer = new XmlTextWriter(mem, Encoding.UTF8))
{
System.Xml.Serialization.XmlSerializer ser = new System.Xml.Serialization.XmlSerializer(typeof(T));
ser.Serialize(writer, serialObject);
result = Encoding.UTF8.GetString(mem.ToArray());
}
}
return result;
} public static T Deserialize<T>(string str) where T : class
{
T result = null;
using (MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(str)))
{
using (StreamReader streamReader = new StreamReader(memoryStream))
{
System.Xml.Serialization.XmlSerializer xmlSerializer = new System.Xml.Serialization.XmlSerializer(typeof(T));
result = (T)xmlSerializer.Deserialize(memoryStream);
}
}
return result;
}
}
上面的写法持续序列化不会有内存溢出的性能问题,之前一直被告知直接引用公司某位老鸟封装好的dll来序列化,后来发现了老是出现内存溢出,贴一下它的错误写法,仅供吸取教训:
public class XMLUtil
{
/// <summary>
/// XML & Datacontract Serialize & Deserialize Helper
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="serialObject"></param>
/// <returns></returns>
public static string Serializer<T>(T serialObject) where T : class
{
//try
//{
XmlSerializer ser = new XmlSerializer(typeof(T));
System.IO.MemoryStream mem = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(mem, Encoding.UTF8);
ser.Serialize(writer, serialObject);
writer.Close(); return Encoding.UTF8.GetString(mem.ToArray());
//}
//catch (Exception ex)
//{
// return null;
//}
} public static T Deserialize<T>(string str) where T : class
{
//try
//{
XmlSerializer mySerializer = new XmlSerializer(typeof(T));
StreamReader mem2 = new StreamReader(
new MemoryStream(System.Text.Encoding.UTF8.GetBytes(str)),
System.Text.Encoding.UTF8); return (T)mySerializer.Deserialize(mem2);
//}
//catch (Exception)
//{
// return null;
//}
} //public static string Json_SerializeObject(object value)
//{
// return Newtonsoft.Json.JsonConvert.SerializeObject(value);
//}
//public static object Json_DeserializeObject(string value)
//{
// return Newtonsoft.Json.JsonConvert.DeserializeObject(value);
//}
//public static T Json_DeserializeObject<T>(string value)
//{
// return Newtonsoft.Json.JsonConvert.DeserializeObject<T>(value);
//}
}
哎,老鸟赶时间的时候写代码吧,直接放内存里,流都忘记释放了。。。
C#序列化总结的更多相关文章
- 【.net 深呼吸】序列化中的“引用保留”
假设 K 类中有两个属性/字段的类型相同,并且它们引用的是同一个对象实例,在序列化的默认处理中,会为每个引用单独生成数据. 看看下面两个类. [DataContract] public class 帅 ...
- 【.net 深呼吸】设置序列化中的最大数据量
欢迎收看本期的<老周吹牛>节目,由于剧组严重缺钱,故本节目无视频无声音.好,先看下面一个类声明. [DataContract] public class DemoObject { [Dat ...
- 用dubbo时遇到的一个序列化的坑
首先,这是标题党,问题并不是出现在序列化上,这是报错的一部分: Caused by: com.alibaba.dubbo.remoting.RemotingException: Failed to s ...
- Unity 序列化
Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http://docs ...
- Unity 序列化 总结
查找了 Script Serialization http://docs.unity3d.com/Manual/script-Serialization.html 自定义序列化及例子: http:// ...
- [C#] C# 知识回顾 - 序列化
C# 知识回顾 - 序列化 [博主]反骨仔 [原文地址]http://www.cnblogs.com/liqingwen/p/5902005.html 目录 序列化的含义 通过序列化保存对象数据 众 ...
- Newtonsoft.Json设置类的属性不序列化
参考页面: http://www.yuanjiaocheng.net/webapi/parameter-binding.html http://www.yuanjiaocheng.net/webapi ...
- C# 序列化与反序列化几种格式的转换
这里介绍了几种方式之间的序列化与反序列化之间的转换 首先介绍的如何序列化,将object对象序列化常见的两种方式即string和xml对象; 第一种将object转换为string对象,这种比较简单没 ...
- Netty实现高性能RPC服务器优化篇之消息序列化
在本人写的前一篇文章中,谈及有关如何利用Netty开发实现,高性能RPC服务器的一些设计思路.设计原理,以及具体的实现方案(具体参见:谈谈如何使用Netty开发实现高性能的RPC服务器).在文章的最后 ...
- .Net深入实战系列—JSON序列化那点事儿
序 当前主流的序列化JSON字符串主要有两种方式:JavaScriptSerializer及Json.net(Nuget标识:Newtonsoft.Json).JavaScriptSerializer ...
随机推荐
- 2718:晶晶赴约会-poj
总时间限制: 1000ms 内存限制: 65536kB 描述 晶晶的朋友贝贝约晶晶下周一起去看展览,但晶晶每周的1.3.5有课必须上课,请帮晶晶判断她能否接受贝贝的邀请,如果能输出YES:如果不能 ...
- icheck如何修改样式大小
icheck默认样式比较大,有需求调整checkbox大小. 1. 最简单的方法可用css3来实现,让整个模块层缩放,不兼容低版本浏览器. transform:scale(0.7,0.7) 2. ...
- [C#]使用Label标签控件模拟窗体标题的移动
本文为原创文章.源代码为原创代码,如转载/复制,请在网页/代码处明显位置标明原文名称.作者及网址,谢谢! 开发工具:VS2017 语言:C# DotNet版本:.Net FrameWork 4.0及以 ...
- 深入理解javascript函数进阶系列第一篇——高阶函数
前面的话 前面的函数系列中介绍了函数的基础用法.从本文开始,将介绍javascript函数进阶系列,本文将详细介绍高阶函数 定义 高阶函数(higher-order function)指操作函数的函数 ...
- PostgreSQL索引描述
索引方式:唯一索引,主键索引,多属性索引,部分索引,表达式索引. 索引类型:B-Tree,Hash,GiST,GIN以及表达式索引 PostgreSQL所有索引都是“从属索引”,也就是说,索引在物理上 ...
- 源码安装pipelineDB之CentOS7
源码下载:https://github.com/pipelinedb/pipelinedb github上面README只要是针对ubunte来安装的. 在正式安装前,要先下载好依赖的包: check ...
- 【tyvj P4879】骰子游戏
http://www.tyvj.cn/p/4879 首先,投一个骰子,每个数字出现的概率都是一样的.也就是不算小A的话,n个人投出x个骰子需要的次数和点数无关. 计数问题考虑dp,令f(i,j)为前i ...
- mongoDB之集合操作
mongoDB之集合操作 mongoDB中的集合相当于mysql中的表. mongoDB中集合的创建: 第一种方式:不限制集合大小 db.createCollection("集合名称&q ...
- 一个模型中有两个外键指向同一张表时,创建迁移模型时报错:“ HINT: Add or change a related_name argument to the definition for 'AnswersModel.author' or 'AnswersModel.relay_to'.”解决方案
class AnswersModel(models.Model): author = models.ForeignKey(FrontUserModel,null=True,related_name=' ...
- cocos2dx中关于Action动作的相关API的具体介绍
//CCMoveBy 创建一个移动的动作 //參数1:移动到目标坐标所需的时间 //參数2:目标坐标 //支持reverse 能够获取其反向动作 //CCMoveTo 一样的 //CCAct ...