json(javascriptobject notation, js 对象标记) 是一种轻量级的数据交换格式。
关于内存对象和json字符串的相互转换,在实际项目中应比较广泛,经过一番搜索,找到如下三种方法来解决此问题
分别是使用newtonsoft.json.dll
、datacontractjsonserializer
、javascriptserializer
。
方法一:newtonsoft.json.dll
newtonsoft.json.dll在.net2.0之后的版本可以支持 我的版本.net framework4.0
添加newtonsoft.json的引用
对象与json字符串转换类设计
class jsonnewtonsoft { /// <summary> /// 把对象转换为json字符串 /// </summary> /// <param name="o">对象</param> /// <returns>json字符串</returns> public static string tojson(this object o) { if (o == null) { return null; } return jsonconvert.serializeobject(o); } /// <summary> /// 把json文本转为实体 /// </summary> /// <typeparam name="t"></typeparam> /// <param name="input"></param> /// <returns></returns> public static t fromjson<t>(this string input) { try { return jsonconvert.deserializeobject<t>(input); } catch (exception ex) { return default(t); } } }
方法二:datacontractjsonserializer
使用这种 需要引用system.runtime.serialization.dll
类设计
class jsondatacontractjsonserializer { /// <summary> /// 内存对象转换为json字符串 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static string objecttojson(object obj) { datacontractjsonserializer serializer = new datacontractjsonserializer(obj.gettype()); memorystream stream = new memorystream(); serializer.writeobject(stream, obj); byte[] databytes = new byte[stream.length]; stream.position = 0; stream.read(databytes, 0, (int)stream.length); return encoding.utf8.getstring(databytes); } /// <summary> /// json字符串转内存对象 /// </summary> /// <param name="jsonstring"></param> /// <param name="obj"></param> /// <returns></returns> public static object jsontoobject(string jsonstring, object obj) { datacontractjsonserializer serializer = new datacontractjsonserializer(obj.gettype()); memorystream mstream = new memorystream(encoding.utf8.getbytes(jsonstring)); return serializer.readobject(mstream); } }
方法三:javascriptserializer
需要引用:system.web.extensions.dll
类设计
public static class jsonjavascriptserializer { /// <summary> /// 内存对象转换为json字符串 /// </summary> /// <param name="obj"></param> /// <returns></returns> public static string tojson(object obj) { stringbuilder sb = new stringbuilder(); javascriptserializer json = new javascriptserializer(); json.serialize(obj, sb); return sb.tostring(); } /// <summary> /// json字符串转内存对象 /// </summary> /// <param name="jsonstring"></param> /// <param name="obj"></param> /// <returns></returns> public static t fromjson<t>(string jsonstring) { javascriptserializer json = new javascriptserializer(); return json.deserialize<t>(jsonstring); } }
程序测试:
新建一个测试对象类student.cs
public enum sex { 男=0, 女=1 } [serializable()] class student { private string _name; public string name { get { return _name; } set { _name = value; } } private int _age; public int age { get { return _age; } set { _age = value; } } private sex _sex = sex.男; public sex sex { get { return _sex; } set { _sex = value; } } public student() { } public student(string name,int age,sex sex) { this._name = name; this._age = age; this._sex = sex; } }
测试程序
static void main(string[] args) { student st = new student("笨男孩",22,sex.男); console.writeline("============方法一============================================"); //方法一 console.writeline("方法一对象转json字符串"); string jsonstr = jsonnewtonsoft.tojson(st); console.writeline(jsonstr); console.writeline("方法一json字符串转对象"); student stobj = (student)jsonnewtonsoft.fromjson<student>(jsonstr); console.writeline("姓名:{0} 年龄:{1} 性别:{2}",stobj.name,stobj.age,stobj.sex); console.writeline("============方法二============================================"); //方法二 console.writeline("方法二对象转json字符串"); string jsonstr2 = jsondatacontractjsonserializer.tojson(st); console.writeline(jsonstr2); console.writeline("方法二json字符串转对象"); student stobj2 = (student)jsondatacontractjsonserializer.fromjson(jsonstr2, st); console.writeline("姓名:{0} 年龄:{1} 性别:{2}", stobj2.name, stobj2.age, stobj2.sex); console.writeline("============方法三============================================"); //方法二 console.writeline("方法三对象转json字符串"); string jsonstr3 = jsonjavascriptserializer.tojson(st); console.writeline(jsonstr3); console.writeline("方法三json字符串转对象"); student stobj3 = (student)jsonjavascriptserializer.fromjson<student>(jsonstr3); console.writeline("姓名:{0} 年龄:{1} 性别:{2}", stobj3.name, stobj3.age, stobj3.sex); console.readkey(); }
程序运行结果:
运行结果:
性能对比:
综上所述,一般采用json.net方法一比较好!
参考:
javascriptserializer类介绍:https://msdn.microsoft.com/zh-cn/library/system.web.script.serialization.javascriptserializer(v=vs.110).aspx
datacontractjsonserializer类介绍:https://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.json.datacontractjsonserializer(v=vs.110).aspx
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对代码网的支持。如果你想了解更多相关内容请查看下面相关链接
发表评论