您的位置:首页 > 其它

解决序列化类型为“System.Reflection.RuntimeModule”的对象时检测到循环引用。

2017-08-14 14:24 666 查看
定义一个继承JavaScriptConverter的子类

public class DataTableConverter : JavaScriptConverter
{
/// <summary>序列化</summary>
public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
DataTable dt = obj as DataTable;
Dictionary<string, object> result = new Dictionary<string, object>();

List<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();

foreach (DataRow dr in dt.Rows)
{
Dictionary<string, object> row = new Dictionary<string, object>();
foreach (DataColumn dc in dt.Columns)
{
row.Add(dc.ColumnName, dr[dc.ColumnName]);
}
rows.Add(row);
}

result["Rows"] = rows;

return result;
}

/// <summary>反序列化</summary>
public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
throw new NotImplementedException();
}

/// <summary>
/// 获取本转换器支持的类型
/// </summary>
public override IEnumerable<Type> SupportedTypes
{
get { return new Type[] { typeof(DataTable) }; }
}
}


序列化之前先将对象进行注册

JavaScriptSerializer resultjson = new JavaScriptSerializer();

resultjson.RegisterConverters(new JavaScriptConverter[] { new DataTableConverter() });

string data = resultjson.Serialize( this );
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐