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
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对代码网的支持。如果你想了解更多相关内容请查看下面相关链接
发表评论