【发布时间】:2015-10-27 13:59:01
【问题描述】:
我想在不使用 [JsonConverter(typeof(...))] 属性的情况下将 JsonConverter 分配给一个类(因为我正在使用 Web API 做一些复杂的事情,这需要我在与定义类的位置不同的程序集中分配 JsonConverter)。
Globally use a JsonConverter on a class without the attribute 的答案几乎回答了我的问题。但是我的问题是关于 Web API,所以我不清楚:
- 我的合同解析器应该使用什么基类?我怀疑它应该是
JsonContractResolver,但不确定要传递给其构造函数的MediaTypeFormatter对象。 - 在 Web API 中声明自定义合同解析器的正确方法是什么?
下面的代码是我尝试过的,但它不起作用。我的自定义合约解析器没有被使用,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;
}
}
【问题讨论】:
-
您不需要使用自定义合约解析器,您可以将转换器转换为 Global.asax.cs 中的
JsonSerializerSettings.Converters。见stackoverflow.com/questions/7427909/…。 -
@dbc 非常感谢,我能够以这种方式解决它。如果您将其添加为答案,我会接受。
-
我的回答只是重复,所以我建议关闭它。
标签: .net asp.net-web-api json.net asp.net-web-api2