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);
