手机
当前位置:查字典教程网 >编程开发 >C#教程 >C#简单快速的json组件fastJSON使用介绍
C#简单快速的json组件fastJSON使用介绍
摘要:JSON数据格式简洁,用于数据的持久化和对象传输很实用。最近在做一个Razor代码生成器,需要把数据库的表和列的信息修改后保存下来,想到用J...

JSON数据格式简洁,用于数据的持久化和对象传输很实用。最近在做一个Razor代码生成器,需要把数据库的表和列的信息修改后保存下来,想到用JSON序列化对象并保存,需要时再反序列化成对象会简单一些。codeplex上发现了fastJSON项目,好像很不错的样子。这里是作者做的性能测试:

C#简单快速的json组件fastJSON使用介绍1

代码调用

复制代码 代码如下:

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

}

}

【C#简单快速的json组件fastJSON使用介绍】相关文章:

C# DES加密算法中向量的作用详细解析

C#实现的几种委托方式介绍

C# Dictionary的使用实例代码

C# 的关键字详细介绍

C#可选参数的相关使用

浅析C# 基础语法的使用

C# ConfigHelper 辅助类介绍

C#垃圾回收机制的详细介绍

c# Base关键字的使用

DataReader、DataSet、DataAdapter和DataView使用介绍

精品推荐
分类导航