转载:在ASP.net 3.5中 用JSON序列化对象(两种方法)
2009-08-17 15:17
761 查看
asp.net3.5中已经集成了序列化对象为json的方法。
1:System.Runtime.Serialization.Json;
2:System.Web.Script.Serialization两个命名空间下的不同方法进行序列化和反序列化。
第一种方法:System.Runtime.Serialization.Json
public class JsonHelper
{
/// <summary>
/// 生成Json格式
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static string GetJson<T>(T obj)
{
DataContractJsonSerializer json = new DataContractJsonSerializer(obj.GetType());
using (MemoryStream stream = new MemoryStream())
{
json.WriteObject(stream, obj);
string szJson = Encoding.UTF8.GetString(stream.ToArray()); return szJson;
}
}
/// <summary>
/// 获取Json的Model
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="szJson"></param>
/// <returns></returns>
public static T ParseFromJson<T>(string szJson)
{
T obj = Activator.CreateInstance<T>();
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
return (T)serializer.ReadObject(ms);
}
}
}
public class topMenu
{
public string id { get; set; }
public string title { get; set; }
public string defaulturl { get; set; }
}
topMenu t_menu = new topMenu()
{
id = "1",
title = "全局",
defaulturl = "123456"
};
List<topMenu> l_topmenu = new List<topMenu>();
for (int i = 0; i < 3; i++)
{
l_topmenu.Add(t_menu);
}
Response.Write(JsonHelper.GetJson<List<topMenu>>(l_topmenu));
输出结果为:
[{"defaulturl":"123456","id":"1","title":"全局"},{"defaulturl":"123456","id":"1","title":"全局"},{"defaulturl":"123456","id":"1","title":"全局"}]
下面利用上面ParseFromJson方法读取Json
输出结果为:全局
string szJson = @"{""id"":""1"",""title"":""全局"",""defaulturl"":""123456""} ";
topMenu t_menu2 = JsonHelper.ParseFromJson<topMenu>(szJson);
Response.Write(t_menu2.title);
第二种方法:System.Web.Script.Serialization(引用System.Web.Extensions.dll)还是用到上面方法中JSON属性的类,序列化方式不一样。
topMenu t_menu = new topMenu()
{
id = "1",
title = "全局",
defaulturl = "123456"
};
List<topMenu> l_topmenu = new List<topMenu>();
for (int i = 0; i < 3; i++)
{
l_topmenu.Add(t_menu);
}
下面用这种方式输出:
JavaScriptSerializer jss = new JavaScriptSerializer();
Response.Write( jss.Serialize(l_topmenu ));
输出结果是相同的
[{"defaulturl":"123456","id":"1","title":"全局"},{"defaulturl":"123456","id":"1","title":"全局"},{"defaulturl":"123456","id":"1","title":"全局"}]
JavaScriptSerializer中的Deserialize方法读取Json
string szJson = @"{""id"":""1"",""title"":""全局"",""defaulturl"":""123456""} ";
topMenu toptabmenu = jss.Deserialize<topMenu>(szJson);
Response.Write( jss.Serialize(toptabmenu.title));
输出结果为:全局
综上:两种方法个有好处。一个比较灵活。[ScriptIgnore] ,可以让JSON序列化忽略它从而不输出。不被序列化。
1:System.Runtime.Serialization.Json;
2:System.Web.Script.Serialization两个命名空间下的不同方法进行序列化和反序列化。
第一种方法:System.Runtime.Serialization.Json
public class JsonHelper
{
/// <summary>
/// 生成Json格式
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static string GetJson<T>(T obj)
{
DataContractJsonSerializer json = new DataContractJsonSerializer(obj.GetType());
using (MemoryStream stream = new MemoryStream())
{
json.WriteObject(stream, obj);
string szJson = Encoding.UTF8.GetString(stream.ToArray()); return szJson;
}
}
/// <summary>
/// 获取Json的Model
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="szJson"></param>
/// <returns></returns>
public static T ParseFromJson<T>(string szJson)
{
T obj = Activator.CreateInstance<T>();
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
return (T)serializer.ReadObject(ms);
}
}
}
public class topMenu
{
public string id { get; set; }
public string title { get; set; }
public string defaulturl { get; set; }
}
topMenu t_menu = new topMenu()
{
id = "1",
title = "全局",
defaulturl = "123456"
};
List<topMenu> l_topmenu = new List<topMenu>();
for (int i = 0; i < 3; i++)
{
l_topmenu.Add(t_menu);
}
Response.Write(JsonHelper.GetJson<List<topMenu>>(l_topmenu));
输出结果为:
[{"defaulturl":"123456","id":"1","title":"全局"},{"defaulturl":"123456","id":"1","title":"全局"},{"defaulturl":"123456","id":"1","title":"全局"}]
下面利用上面ParseFromJson方法读取Json
输出结果为:全局
string szJson = @"{""id"":""1"",""title"":""全局"",""defaulturl"":""123456""} ";
topMenu t_menu2 = JsonHelper.ParseFromJson<topMenu>(szJson);
Response.Write(t_menu2.title);
第二种方法:System.Web.Script.Serialization(引用System.Web.Extensions.dll)还是用到上面方法中JSON属性的类,序列化方式不一样。
topMenu t_menu = new topMenu()
{
id = "1",
title = "全局",
defaulturl = "123456"
};
List<topMenu> l_topmenu = new List<topMenu>();
for (int i = 0; i < 3; i++)
{
l_topmenu.Add(t_menu);
}
下面用这种方式输出:
JavaScriptSerializer jss = new JavaScriptSerializer();
Response.Write( jss.Serialize(l_topmenu ));
输出结果是相同的
[{"defaulturl":"123456","id":"1","title":"全局"},{"defaulturl":"123456","id":"1","title":"全局"},{"defaulturl":"123456","id":"1","title":"全局"}]
JavaScriptSerializer中的Deserialize方法读取Json
string szJson = @"{""id"":""1"",""title"":""全局"",""defaulturl"":""123456""} ";
topMenu toptabmenu = jss.Deserialize<topMenu>(szJson);
Response.Write( jss.Serialize(toptabmenu.title));
输出结果为:全局
综上:两种方法个有好处。一个比较灵活。[ScriptIgnore] ,可以让JSON序列化忽略它从而不输出。不被序列化。
相关文章推荐
- 在ASP.net 3.5中 用JSON序列化对象(两种方法)(转自LeonSky)
- 在ASP.net 3.5中 用JSON序列化对象(两种方法)
- 黑马程序员_学习日记73_725ASP.NET(禁用Cookie、ASP.NET中的重要对象、JavaScript实现AJAX、两种Json格式的序列化方法、JQuery中实现ajax的五种方法)
- Web前台传对象字符串到后台并让后台反序列化对象字符串的方法(ASP.NET) json对象和字符串的转换
- ASP.NET中把对象序列化成JSON字符串的三种方法
- 步步为营:Asp.Net序列化Json格式的两种方法
- 【ASP.NET】DataContract序列化,反序列化对象中包含用接口声明的属性时的处理方法
- asp.net mvc框架中,ajax传递json对象,并自动转换成参数对象的方法
- 转载:ASP.NET中JSON的序列化和反序列化
- C#实体对象序列化成Json并让字段的首字母小写的两种解决方法
- ASP.NET:使用Newtonsoft.Json序列化和反序列化JSON对象的例子
- asp.net MVC接收前端传递的复杂json对象的简单处理方法
- asp.net中序列化和反序列化json的两种常用方式
- Jquery如何序列化form表单数据为JSON对象 C# ADO.NET中设置Like模糊查询的参数 从客户端出现小于等于公式符号引发检测到有潜在危险的Request.Form 值 jquery调用iframe里面的方法 Js根据Ip地址自动判断是哪个城市 【我们一起写框架】MVVM的WPF框架(三)—数据控件 设计模式之简单工厂模式(C#语言描述)
- asp.net远程调用WebService的两种方法(转载)
- ASP.NET:使用Newtonsoft.Json序列化和反序列化JSON对象的例子
- Web前台传对象字符串到后台并让后台反序列化对象字符串的方法(ASP.NET)
- ASP.NET使用Ajax返回Json对象的方法
- Asp.net Web API 返回Json对象的两种方式
- Web前台传对象字符串到后台并让后台反序列化对象字符串的方法(ASP.NET)