from:http://www.cnblogs.com/hetuan/articles/4565702.html
NewtonSoft.Json對需要轉為JSON字符串的對象的NULL值以及DBNull是直接處理成NULL的。對DBNull 的JSON字符串對應需要空字符串。
/// <summary> /// 對DBNull的轉換處理,此處只寫了轉換成JSON字符串的處理,JSON字符串轉對象的未處理 /// </summary> public class DBNullCreationConverter : JsonConverter { /// <summary> /// 是否允許轉換 /// </summary> public override bool CanConvert(Type objectType) { bool canConvert = false; switch (objectType.FullName) { case "System.DBNull": canConvert = true; break; } return canConvert; } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { return existingValue; } public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { writer.WriteValue(string.Empty); } public override bool CanRead { get { return false; } } /// <summary> /// 是否允許轉換JSON字符串時調用 /// </summary> public override bool CanWrite { get { return true; } } }
使用:
IsoDateTimeConverter timeFormat = new IsoDateTimeConverter(); DBNullCreationConverter x = new DBNullCreationConverter(); timeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss"; return JsonConvert.SerializeObject(ds.Tables, Newtonsoft.Json.Formatting.Indented, timeFormat, x);