我想在没有使用[JsonConverter(typeof(...))]
属性的情况下将JsonConverter分配给一个类(因为我正在使用Web API做一些复杂的事情,这需要我在不同的程序集中分配JsonConverter而不是类定义)。
Globally use a JsonConverter on a class without the attribute 的回答几乎回答了我的问题。但是我的问题是关于Web API,所以我不清楚:
JsonContractResolver
但不确定将MediaTypeFormatter
对象传递给它的构造函数。以下代码是我尝试过的,但不起作用。我的自定义合约解析程序未被使用,CreateObjectContract()
中的断点不会被击中。
的Global.asax.cs
protected void Application_Start()
{
GlobalConfiguration.Configuration.Formatters.JsonFormatter
.SerializerSettings.ContractResolver =
new CustomResolver(GlobalConfiguration.Configuration.Formatters.JsonFormatter);
...
}
CustomResolver.cs
public class CustomResolver : JsonContractResolver
{
public CustomResolver(MediaTypeFormatter formatter) : base(formatter) { }
protected override JsonObjectContract CreateObjectContract(Type objectType)
{
JsonObjectContract contract = base.CreateObjectContract(objectType);
if (typeof(MyBaseClass).IsAssignableFrom(objectType))
contract.Converter = new MyBaseClassJsonConverter();
return contract;
}
}
答案 0 :(得分:1)
我在没有使用自定义合约解析器的情况下解决了这个问题,只需将我的JsonConverter类添加到WebApiConfig.cs中的JsonSerializerSettings.Converters
集合中:
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new MyBaseClassJsonConverter());
您也可以在Global.asax.cs中注册:
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new MyBaseClassJsonConverter());
(这个问题被标记为另一个类似问题的副本。但是我仍然会发布一个答案,因为另一个问题仅针对一个特定的JsonConverter而且接受的答案并不清楚如何解决Web API的问题。)