在ASP.NET AJAX中,客户端的序列化与反序列能力由Sys.Serialization.JavaScriptSerializer类可实现,具体可通过以下方法实现
private static string DataTableToJsonWithJavaScriptSerializer(DataTable table)
{
JavaScriptSerializer jsSerializer = new JavaScriptSerializer();
List<Dictionary<string, object>> parentRow = new List<Dictionary<string, object>>();
Dictionary<string, object> childRow;
foreach (DataRow row in table.Rows)
{
childRow = new Dictionary<string, object>();
foreach (DataColumn col in table.Columns)
{
childRow.Add(col.ColumnName, row[col]);
}
parentRow.Add(childRow);
}
return jsSerializer.Serialize(parentRow);
}
当字段类型为日期型时,转换将会出现.Net 专有格式
\/Date(1533549600000)
这种格式,如果出现在webservic中,非.net语言就无法识别,需要特殊处理。
这种情况下,如果需要考虑接口兼容,就需要在c# 中做下转义处理,具体处理如下:
string dtResult = DataTableToJsonWithJavaScriptSerializer(dt);
dtResult = Regex.Replace(dtResult, @"\\/Date\((\d+)\)\\/", match =>
{
DateTime dts = new DateTime(1970, 1, 1);
dts = dts.AddMilliseconds(long.Parse(match.Groups[1].Value));
dts = dts.ToLocalTime();
return dts.ToString("yyyy-MM-dd HH:mm:ss");
});