当前位置: 首页> 健康> 养生 > 笔记:Newtonsoft.Json 自定义一个根据typeconverter转换的JsonConverter

笔记:Newtonsoft.Json 自定义一个根据typeconverter转换的JsonConverter

时间:2025/8/26 18:11:29来源:https://blog.csdn.net/u010975589/article/details/140220551 浏览次数:0次

        在 Newtonsoft.Json 中创建一个根据 TypeConverter 转换的 JsonConverter 允许你在序列化和反序列化过程中利用 .NET 的 TypeConverter 机制。这种方式特别有用,当你想要为不直接支持 JSON 序列化的类型提供自定义的序列化逻辑时,比如第三方库中的类型或者特殊的数据结构。
下面是一个示例,展示如何实现这样一个 JsonConverter:


1.    定义 TypeConverterJsonConverter 类


这个自定义的 JsonConverter 将检查目标类型是否有一个 TypeConverter,该 TypeConverter 能够将对象转换为字符串,反之亦然。如果有,它将使用这个 TypeConverter 来进行序列化和反序列化。

public class TypeConverterJsonConverter : JsonConverter
{public override bool CanConvert(Type objectType){// 检查是否存在能够转换到字符串和从字符串转换回来的 TypeConverterTypeConverter converter = TypeDescriptor.GetConverter(objectType);return converter != null && converter.CanConvertFrom(typeof(string)) && converter.CanConvertTo(typeof(string));}public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer){if (reader.TokenType == JsonToken.Null){return null;}var converter = TypeDescriptor.GetConverter(objectType);return converter.ConvertFromInvariantString((string)reader.Value);}public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer){if (value == null){writer.WriteNull();return;}var converter = TypeDescriptor.GetConverter(value.GetType());writer.WriteValue(converter.ConvertToInvariantString(value));}

2.    使用 TypeConverterJsonConverter


现在,你可以在序列化和反序列化时使用这个自定义的 JsonConverter。这对于那些通过 TypeConverter 可以转换为字符串和从字符串转换回来的类型特别有用。

[JsonConverter(typeof(TypeConverterJsonConverter))]
public class CustomType
{// 假设这个类有一个能够转换为字符串和从字符串转换回来的 TypeConverter
}// 现在,你可以序列化和反序列化包含 CustomType 类型的对象了
CustomType myObject = new CustomType();
string json = JsonConvert.SerializeObject(myObject);CustomType deserializedObject = JsonConvert.DeserializeObject<CustomType>(json);

注意事项


•    这个自定义 JsonConverter 假设目标类型有一个有效的 TypeConverter,能够进行到字符串和从字符串的转换。不是所有的类型都有这样的 TypeConverter,所以在使用之前请确保进行了适当的检查。
•    使用 TypeConverter 进行序列化和反序列化可能不适用于所有场景,特别是当类型的字符串表示不足以完全恢复对象状态时。在这些情况下,考虑实现更具体的序列化逻辑。
•    这种方法的优点是它提供了一种灵活的方式来支持额外的类型,而无需为每种类型编写专门的序列化逻辑。 

System.Windows.Controls 命名空间 | Microsoft Learn

关键字:笔记:Newtonsoft.Json 自定义一个根据typeconverter转换的JsonConverter

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: