后台生成JSON及前台解析
首先,添加两个DLL的引用,分别是:System.Runtime.Serialization.dll、System.ServiceModel.Web.dll。
然后写ToJson方法:
/// <summary>
/// 格式化成Json字符串
/// </summary>
/// <param name="obj">需要格式化的对象</param>
/// <returns>Json字符串</returns>
public static string ToJson(object obj)
{
// 首先,当然是JSON序列化
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
// 定义一个stream用来存发序列化之后的内容
Stream stream = new MemoryStream();
serializer.WriteObject(stream, obj);
// 从头到尾将stream读取成一个字符串形式的数据,并且返回
stream.Position = 0;
StreamReader streamReader = new StreamReader(stream);
return streamReader.ReadToEnd();
}
然后写具体model:如果要对该类进行序列化,一定要在类前面添加上“[DataContract]”,在属性前面添加上“[DataMember]”,这样才能被“DataContractJsonSerializer”序列化成JSON。
[DataContract]
public class PHSClass
{
[DataMember]
public string ProjectID { get; set; }
[DataMember]
public string ProjectName { get; set; }
[DataMember]
public string Recipient { get; set; }
[DataMember]
public string SplitDetails { get; set; }
}
调用实例:
//初始化时,用Json格式存放已分配任务
List<PHSClass> list = new List<PHSClass>();
ds = cp.get_ProjectHeadSplit_ByPID(AppID);
if (ds != null && ds.Tables[0].Rows.Count > 0)
{
foreach (DataRow dr in ds.Tables[0].Rows)
{
PHSClass pc = new PHSClass();
string ProjectID = dr["ProjectID"].ToString();
string ProjectName = dr["ProjectName"].ToString();
string Recipient = dr["Recipient"].ToString();
string SplitDetails = dr["SplitDetails"].ToString();
pc.ProjectID = ProjectID;
pc.ProjectName = ProjectName;
pc.Recipient = Recipient;
pc.SplitDetails = SplitDetails;
list.Add(pc);
}
ValList = ToJson(list);
}
hidValList.Value = ValList;
前台解析:
$(document).ready(function() {
var valList = document.getElementById("hidValList").value;
if (valList != "") {
var jsonArray = eval(valList); //json解析
for (var i = 0; i < jsonArray.length; i++) {
funAddRows(jsonArray[i].ProjectID, jsonArray[i].ProjectName, jsonArray[i].SplitDetails, jsonArray[i].Recipient);
}
}
});
前台json格式,后台解析方法
JavaScriptSerializer json = new JavaScriptSerializer();
List<CheckRecodrs> list = json.Deserialize<List<CheckRecodrs>>(strRecordValues);