Используя Json.Net, у меня есть свойства в моих объектах, которые нуждаются в особой заботе, чтобы сериализовать/десериализовать их. Создав потомка JsonConverter
, мне удалось это сделать успешно. Это общий способ сделать это:
public class SomeConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
...
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
...
}
public override bool CanConvert(Type objectType)
{
...
}
}
class SomeClass
{
[JsonProperty, JsonConverter(typeof(SomeConverter))]
public SomeType SomeProperty;
}
//Later on, in code somewhere
SomeClass SomeObject = new SomeClass();
string json = JsonConvert.SerializeObject(SomeObject, new SomeConverter());
Моя проблема с этим кодом заключается в том, что мне нужно представить свой собственный конвертер в каждой сериализации/десериализации. В моем проекте есть много случаев, когда я не могу этого сделать. Например, я использую другие внешние проекты, которые также используют Json.Net, и они будут работать над моими экземплярами SomeClass
. Но поскольку я не хочу или не могу внести изменения в свой код, у меня нет способа представить свой конвертер.
Можно ли каким-либо образом зарегистрировать конвертер, используя, возможно, некоторый член static
в Json.Net, независимо от того, где происходит сериализация/десериализация, мой конвертер всегда присутствует?