使用 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
实例。但是由于我不想或不能更改他们的代码,所以我没有办法介绍我的转换器。
有没有什么方法可以在 Json.Net 中使用一些 static
成员来注册我的转换器,这样无论序列化/反序列化发生在哪里,我的转换器总是存在?
最佳答案
是的,这可以使用 Json.Net 5.0.5 或更高版本。参见 JsonConvert.DefaultSettings
.
JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
Converters = new List<JsonConverter> { new SomeConverter() }
};
// Later on...
string json = JsonConvert.SerializeObject(someObject); // this will use SomeConverter
如果您使用的是 Web API,则可以像这样全局设置一个转换器:
var config = GlobalConfiguration.Configuration;
var jsonSettings = config.Formatters.JsonFormatter.SerializerSettings;
jsonSettings.Converters.Add(new SomeConverter());
关于c# - 在 Json.Net 中全局注册自定义 JsonConverter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19510532/