使用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
实例上工作。但由于我不想或不能在他们的代码中进行更改,所以我无法介绍我的转换器。
有没有什么办法可以注册我的转换器,在Json.Net中使用一些static
成员,所以无论序列化/反序列化发生在哪里,我的转换器总是存在?
太感谢了,你让我:)日 – Mehran
如果我这样做的App_Start()事件让我在asp.net网页API错误。说'方法没有找到:'虚空Newtonsoft.Json.JsonConvert.set_DefaultSettings' –
@DonnyV。您可能使用的是JSON.NET的旧版本 - 它仍会编译,因为已添加到web.config的版本重定向。 – BrainSlugs83