今天碰到一個問題,需要通過json格式,將前台的數據提交到后台去,然后由后台解析后加以使用。使用Json格式進行數據傳遞,好處顯而易見。我這兒使用Json格式的原因主要是,可以只將數據綁定到一個域上,而不需要綁定多個域進行傳遞,方便數據的調用。
上網找了一些方法,里面使用的一些接口都需要再Silverlight中使用,而不能在web環境中使用。不過web框架下還是保留了一種Json數據的接口:JavaScriptSerializer。
其實將json數據解析成后台數據,就是對數據的反序列化。
下面我就做個簡單的例子說明一下。
在前台先將一系列Json數據放到一個數組中:
$(function(){ var json_str = new Array(); json_str.push(setJdata());//數組中只有一個Json數據 }); function setJdata() { var jdata = { "ReleaseStatus": "更新", "ContentId": "CON0000007", "ContentType": "虎の巻", "ContentVolumn":"Vol.7", "ContentTitle":"標題~~~~~", "ReleaseStartTime": "2012/09/04 02:00", "ReleaseEndTime":"-" } return jdata; }
當然,在提交到后台前還先需要將Json數據字符串化,以便后台進行解析。
string Json_str = "[{\"ReleaseStatus\":\"更新\",\"ContentId\":\"CON0000007\",\"ContentType\":\"虎の巻\",\"ContentVolumn\":\"Vol.7\",\"ContentTitle\":\"標題~~~~~\",\"ReleaseStartTime\":\"2012/09/04 02:00\",\"ReleaseEndTime\":\"-\"}]";
這時候用MVC3自帶的類庫進行解析:using System.Web.Script.Serialization;
JavaScriptSerializer js = new JavaScriptSerializer();
List<ContentModel> list = js.Deserialize<List<ContentModel>>(list.JsonData);
從這段代碼我們可以看到,使用這個類庫對Json數據進行解析,可以直接解析為所要的對象(ContentModel)。
如果Json數據是一個數組,還能解析為所要對象的數組對象(List<ContentModel>)。

需要注意的是:對象(ContentModel) 必須為可反序列化對象。
[Serializable] [DataContract]//得在定義對象類前,先聲明這兩個屬性 public class ContentModel { public string ContentId { get; set; } public string ContentType { get; set; } .......................... }
以上是對數據的反序列化,那么數據的序列化該怎么做呢??
很簡單 ,看下面一段代碼:
JavaScriptSerializer serializer = new JavaScriptSerializer(); result.TableData = serializer.Serialize(result.InputContentList);
只要調用JavaScriptSerializer的Serialize方法就可以對數據進行序列化,最后得到一個string型的json數據。
