继承JsonConverter实现json.net支持dataset与datatable序列化

    技术2022-05-18  17

    使用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());


    最新回复(0)