程序应用 .NET Framework 提供的 JavaScriptSerializer 类进行序列化和反序列化操作,须要援用 .NET Framework 中的 System.Web.Extensions 程序集。对于间接进行 DataTable 类型对象的转换会呈现 “序列化类型为“System.Reflection.RuntimeModule”的对象时检测到循环援用” 这一异样,所以程序中对 DataTable 类型的转换作了独自解决,当然只是从 DataTable 转换为 JSON 时作了解决,如果将 JSON 字符串转换为 DataTable 仍然会失败,我想通常状况下的前后端交互只须要用到 DataTable 到 JSON 的转换就差不多了吧,上面是实现:

using System;using System.Web.Script.Serialization;using System.Data;using System.Collections.Generic;// 对象转换为 JSON 字符串string ObjectToJSON(object _obj){    try    {        JavaScriptSerializer serializer = new JavaScriptSerializer();        if (_obj is DataTable)        {            DataTable dt = (DataTable)_obj;            List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();            Dictionary<string, object> row;            foreach (DataRow dr in dt.Rows)            {                row = new Dictionary<string, object>();                foreach (DataColumn dc in dt.Columns)                {                    row.Add(dc.ColumnName, dr[dc]);                }                rows.Add(row);            }            return serializer.Serialize(rows);        }        return serializer.Serialize(_obj);    }    catch    {        return "{}";    }}// JSON 字符串转换为相应类型的对象T JSONToObject<T>(string _json){    try    {        JavaScriptSerializer serializer = new JavaScriptSerializer();        return serializer.Deserialize<T>(_json);    }    catch    {        return default(T);    }}

相干环境:
.NET Framework 4.0