Json序列化和反序列化方法解析
代码如下:
/// <summary>
/// json序列化,用于发送到客户端
/// </summary>
public static string tojsjson(this object item)
{
datacontractjsonserializer serializer = new datacontractjsonserializer(item.gettype());
using (memorystream ms = new memorystream())
{
serializer.writeobject(ms, item);
stringbuilder sb = new stringbuilder();
sb.append(encoding.utf8.getstring(ms.toarray()));
return sb.tostring();
}
}
/// <summary>
/// json反序列化,用于接收客户端json后生成对应的对象
/// </summary>
public static t fromjsonto<t>(this string jsonstring)
{
datacontractjsonserializer ser = new datacontractjsonserializer(typeof(t));
memorystream ms = new memorystream(encoding.utf8.getbytes(jsonstring));
t jsonobject = (t)ser.readobject(ms);
ms.close();
return jsonobject;
}
实体类
. 代码如下:
[datacontract]
public class testobj
{
[datamember]
public string make { get; set; }
[datamember]
public string model { get; set; }
[datamember]
public int year { get; set; }
[datamember]
public string color { get; set; }
}
------------------javascript获取json--------------------
javascript调用测试代码
. 代码如下:
$('#getjson').click(function() {
$.ajax({
url: "getjsonhandler.ashx",
type: 'get',
data: {},
datatype: 'json',
timeout: 1000,
error: function(xmlhttprequest, textstatus, errorthrown) { alert(textstatus) },
success: function(result) {
alert(result.make);
alert(result.model);
alert(result.year);
alert(result.color);
}
});
});
c#后台生成代码
. 代码如下:
public class getjsonhandler: ihttphandler
{
public void processrequest(httpcontext context)
{
testobj obj = new testobj();
obj.make = "make is value";
obj.model = "model is value";
obj.year = 999;
obj.color = "color is value";
context.response.write(obj.tojsjson());
}
public bool isreusable
{
get
{
return false;
}
}
}
//返回值为 {"color":"color is value","make":"make is value","model":"model is value","year":999}
-----------------c#由json生成对象-----------------------
javascript调用测试代码
. 代码如下:
$('#postjson').click(function() {
var m_obj = { make: "dodge", model: "coronet r/t", year: 1968, color: "yellow" };
var jsonstr = json.stringify(m_obj); //用json2.js生成json字符串
$.ajax({
url: "postjsonhandler.ashx",
type: 'post',
data: { postjson: jsonstr },
datatype: 'json',
timeout: 1000,
error: function(xmlhttprequest, textstatus, errorthrown) { alert(textstatus) },
success: function(result) {
alert(result.success);
}
});
});
c#后台生成代码
. 代码如下:
public class postjsonhandler: ihttphandler
{
public void processrequest(httpcontext context)
{
string jsonstr = context.request["postjson"];
testobj obj = jsonstr.fromjsonto<testobj>();
if (string.isnullorempty(obj.make) || string.isnullorempty(obj.model) || string.isnullorempty(obj.color)
|| obj.year < 0)
{
context.response.write("{success:false}");
}
else
{
context.response.write("{success:true}");
}
public bool isreusable
{
get
{
return false;
}
}
}
使用json时需要注意,服务器端拼凑生成json字符串时,一定要注意把字符串用\"\"包裹,不然客户端接收时肯定会报错,根据json字符串生成对象,是根据对应的名称赋值,多于或少于都不会报错。
上一篇: 一文彻底搞懂面试中常问的各种“锁”
下一篇: 吃枣子会胖吗,红枣的好处原来这么多
推荐阅读
-
C#实现的json序列化和反序列化代码实例
-
详解java中的深拷贝和浅拷贝(clone()方法的重写、使用序列化实现真正的深拷贝)
-
IOS开发(74)之把 Array 和 Dictionaries 序列化成 JSON 对象
-
C#使用Json.Net进行序列化和反序列化及定制化
-
JSON键值对序列化和反序列化解析
-
Android App数据格式Json解析方法和常见问题
-
Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全
-
JSON PHP中,Json字符串反序列化成对象/数组的方法
-
js序列化和反序列化解析
-
C# .NET的BinaryFormatter、protobuf-net、Newtonsoft.Json以及自己写的序列化方法序列化效率和序列化后的文件体积大小对比