JSON数据格式简洁,用于数据的持久化和对象传输很实用。最近在做一个Razor代码生成器,需要把数据库的表和列的信息修改后保存下来,想到用JSON序列化对象并保存,需要时再反序列化成对象会简单一些。codeplex上发现了fastJSON项目,好像很不错的样子。这里是作者做的性能测试:
代码调用
复制代码 代码如下:
namespace test
{
class Program
{
static void Main(string[] args)
{
var zoo1 = new zoo();
zoo1.animals = new List<animal>();
zoo1.animals.Add(new cat() { Name = "hello kitty", legs = 4 });
zoo1.animals.Add(new dog() { Name = "dog1", tail = true });
string json= fastJSON.JSON.Instance.ToJSON(zoo1); //序列化
var z = fastJSON.JSON.Instance.ToObject<zoo>(json); //反序列化
Console.WriteLine(z.animals[0].Name);
Console.Read();
}
}
public class animal { public string Name { get; set; } }
public class cat : animal { public int legs { get; set; } }
public class dog : animal { public bool tail { get; set; } }
public class zoo { public List<animal> animals { get; set; }
}
基本的调用就是这么简单! 需要注意的是要反序列化的类好像必须声明为public的。
快速的秘密 大体浏览了一下代码,发现之所以快速的原因是作者利用反射时Emit了大量的IL代码:
复制代码 代码如下:
internal object FastCreateInstance(Type objtype)
{
try
{
CreateObject c = null;
if (_constrcache.TryGetValue(objtype, out c))
{
return c();
}
else
{
if (objtype.IsClass)
{
DynamicMethod dynMethod = new DynamicMethod("_", objtype, null);
ILGenerator ilGen = dynMethod.GetILGenerator();
ilGen.Emit(OpCodes.Newobj, objtype.GetConstructor(Type.EmptyTypes));
ilGen.Emit(OpCodes.Ret);
c = (CreateObject)dynMethod.CreateDelegate(typeof(CreateObject));
_constrcache.Add(objtype, c);
}
else // structs
{
DynamicMethod dynMethod = new DynamicMethod("_",
MethodAttributes.Public | MethodAttributes.Static,
CallingConventions.Standard,
typeof(object),
null,
objtype, false);
ILGenerator ilGen = dynMethod.GetILGenerator();
var lv = ilGen.DeclareLocal(objtype);
ilGen.Emit(OpCodes.Ldloca_S, lv);
ilGen.Emit(OpCodes.Initobj, objtype);
ilGen.Emit(OpCodes.Ldloc_0);
ilGen.Emit(OpCodes.Box, objtype);
ilGen.Emit(OpCodes.Ret);
c = (CreateObject)dynMethod.CreateDelegate(typeof(CreateObject));
_constrcache.Add(objtype, c);
}
return c();
}
}
catch (Exception exc)
{
throw new Exception(string.Format("Failed to fast create instance for type '{0}' from assemebly '{1}'",
objtype.FullName, objtype.AssemblyQualifiedName), exc);
}
}
相关推荐:
在线AI生成文章:智能写作的未来趋势
ChatGPT出现错误503?你需要知道的解决方案和应对策略,ai拉伸字效
SEO能给企业带来什么价值,seo的影响 ,ai蓝衣美女
文章续写AI:提升写作效率,创意无限
为什么要seo排名,为什么要做seo推广 ,AI写作开启创意新世界
seo链接锚是什么,什么是锚链接,如何设置锚链接 ,保山智能AI
为什么网站要做seo,网站做seo的目的是什么 ,ai初选
SEO新人必读:从零开始SEO的核心技巧与实践指南,网站邮件推广设计
ChatGPT画布打不开?如何解决这一常见问题?,Ai怎么储存为Ai格式在桌面
ChatGPT4网页空白:重新定义智能交互的未来,怎么登ai
SEO手法如何通过精准优化提升网站排名,获取海量流量,网站建设协议流程是什么
SEO希望:如何通过SEO优化实现网站突破,迈向成功之路,品牌网站推广软件
SEO利用:让你的网站快速登顶,获取更多流量与客户!,延边小程序推广平台网站
为什么说seo这么重要,seo重要吗 ,ai19920403
AI写作技巧,让创作事半功倍!
SEO找出网站流量提升的终极策略,带你走向搜索引擎巅峰!,朝阳模板网站建设价格
ChatGPT安装包Windows版:让AI助力你的工作与生活,人工智能ai不是梦在线
AI网页设计生成-智能化创造无限可能,ai机甲风背景音乐
了解SEO:让你的网站在搜索引擎中脱颖而出的秘密武器,宝山区常见网站优化
seo线索收集是什么,seo线索收集是什么意思 ,ai生活ai童童
seo适合什么行业,seo适合的行业 ,在ai如何矢量化
ChatGPT-4中文免费破解版:无需付费,体验最强AI助手,ai写作生成器官方下载
SEO部:开启数字化营销新纪元的幕后英雄,株洲营销推广是什么公司
中国AI软实力崛起:技术创新与产业应用的完美融合,seo0066
SEO查:如何用精准的SEO诊断助力网站流量爆发,美团关键词排名怎么补
SEO能够助力网站流量增长,提升品牌竞争力,Seo网站排名原理
SEO未来:如何在变革中抢占先机,迎接数字营销的新纪元,台州网站建设分析和总结
seo经验是什么,seo进阶 ,ai矿机
seo网站是什么东西,seo网站是什么东西啊 ,ai锯齿消失
Goanno跨级借鉴:推动创新与提升效率的秘密武器,崇明区智能ai艾灸费用
SEO站在未来之巅,助力网站在激烈竞争中脱颖而出,推荐网站优化欢迎咨询
《*采集站:带你领略全球最全*资源的宝藏平台》,seo优化易下拉瞧瞧
seo辅助词选什么,seo助手 ,各车企ai
seo需要什么部门,seo主要干什么 ,ai接入仪器
如何通过AI写文章,轻松提高写作效率与质量
SEO包月服务:助力企业提升网站排名与流量的长期利器,网站建设流程 报读文库
seo适合看什么书,自学seo书籍推荐 ,ai少女 刻晴
SEO优化大全:让你的网站排名轻松破局,精准引流更高效!,274357524ai
文章自动生成AI:助力写作新时代,让创作更高效
ChatGPT崩了?用户称打开是一片空白,背后隐藏了什么?,ai 新技巧
ChatGPT的VPN梯子:畅享全球互联网自由,打破地域限制,一直搜Ai
SEO总结:如何通过优化提升网站排名与流量,关键词排名消失
ChatGPT360:全方位提升你的工作与生活效率,ai72787
seo需要学会什么编程,seo要会些什么 ,剪映怎样加ai
在线AI文章生成:智能写作的无限可能
SEO职位:数字营销的核心,开启职业新高峰,汕尾网站建设推广厂商
SEO策划:让你的网站迅速脱颖而出的秘诀,seo优化和技巧
产品seo什么意思,产品seo标题是什么 ,ai模仿张宇
OpenAI银行卡扣款的公司是哪家?揭秘背后的支付流程与安全保障,AI素描相片
ChatGPT当前不可用?背后的原因与解决方案全解析,ai propos