使用json.net应用在.net中实现json的序列化与反序列化是非常实用的,不过不支持处理DataSet和DataTable,json.net的使用比较简单,JavaScriptConvert.SerializeObject(myobj)直接就得到JSON字符串了,但是对于DataSet,DataTable是不支持的。本文继承JsonConverter实现自定义的转换器。dataset:public class DataSetConverter : JsonConverter { public override bool CanConvert(Type objectType) { return typeof(DataSet).IsAssignableFrom(objectType); } public override void WriteJson(JsonWriter writer, object value) { DataSet ds = (DataSet)value; writer.WriteStartObject(); foreach (DataTable dt in ds.Tables) { writer.WritePropertyName(dt.TableName); writer.WriteStartArray(); foreach (DataRow dr in dt.Rows) { writer.WriteStartObject(); foreach (DataColumn dc in dt.Columns) { writer.WritePropertyName(dc.ColumnName); writer.WriteValue(dr[dc].ToString()); } writer.WriteEndObject(); } writer.WriteEndArray(); } writer.WriteEndObject(); } } 调用:JavaScriptConvert.SerializeObject(GetTestDataSet(), new DataSetConverter()); 处理datatable:public class DataTableConverter : JsonConverter { public override void WriteJson(JsonWriter writer, object value) { DataTable dt = (DataTable)value; writer.WriteStartArray(); foreach (DataRow dr in dt.Rows) { writer.WriteStartObject(); foreach (DataColumn dc in dt.Columns) { writer.WritePropertyName(dc.ColumnName); writer.WriteValue(dr[dc].ToString()); } writer.WriteEndObject(); } writer.WriteEndArray(); } public override bool CanConvert(Type objectType) { return typeof(DataTable).IsAssignableFrom(objectType); } } 调用:JavaScriptConvert.SerializeObject(GetTestDataTable(), new DataTableConverter());