1:System.Runtime.Serialization.Json;
2:System.Web.Script.Serialization两个命名空间下的不同方法进行序列化和反序列化。
第一种方法:System.Runtime.Serialization.Json
{
/// <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
输出结果为:全局
topMenu t_menu2 = JsonHelper.ParseFromJson < topMenu > (szJson);
Response.Write(t_menu2.title);
第二种方法:System.Web.Script.Serialization(引用System.Web.Extensions.dll)还是用到上面方法中JSON属性的类,序列化方式不一样。
{
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( jss.Serialize(l_topmenu ));
输出结果是相同的
[{"defaulturl":"123456","id":"1","title":"全局"}, {"defaulturl":"123456","id":"1","title":"全局"}, {"defaulturl":"123456","id":"1","title":"全局"}]
JavaScriptSerializer中的Deserialize方法读取Json
topMenu toptabmenu = jss.Deserialize < topMenu > (szJson);
Response.Write( jss.Serialize(toptabmenu.title));
输出结果为:全局
综上:两种方法个有好处。一个比较灵活。[ScriptIgnore] ,可以让JSON序列化忽略它从而不输出。不被序列化。
在客户端序列化一个对象 使用 json-serialization.js 中的JSON.stringify; 例如: var jsonstr=JSON.stringify(jsobj);
反序列化:使用 内置函数 eval() ; 例如: var jsobj=eval("("+jsonstr+")");