1. 定义一个自定义的JsonConverter类,用于控制反序列化过程中的类型转换。
将null值转换为空字符串的自定义转换器:
public class EmptyStringConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null)
{
return string.Empty;
}
else
{
return reader.Value;
}
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
2.使用JsonSerializerSettings对象设置反序列化
public class JsonHelper
{
/// <summary>
/// 从json串解析指定类型
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="content"></param>
/// <returns></returns>
public static T FromJsonString<T>(string content)
{
var settings = new JsonSerializerSettings();
settings.Converters.Add(new EmptyStringConverter());
return JsonConvert.DeserializeObject<T>(content, settings);
//转换的是值类型可以将这些属性或字段声明为可空类型(int?,double?等或者使用默认值来代替null)
//return JsonConvert.DeserializeObject<T>(content);
}
/// <summary>
/// 将对象转换为json字符串
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="data"></param>
/// <param name="formatting">是否格式化输出</param>
/// <returns></returns>
public static string ToJson<T>(T data, bool formatting = false)
{
return JsonConvert.SerializeObject(data, formatting ? Formatting.Indented: Formatting.None);
}
}