在Json.Net中全局注册自定义JsonConverter

使用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中使用某个成员注册转换器,所以无论序列化/反序列化发生在哪里,转换器始终存在?

回答:

是的,可以使用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());

以上是 在Json.Net中全局注册自定义JsonConverter 的全部内容, 来源链接: utcz.com/qa/406277.html

回到顶部