继承和ASP.NET Web API的JSON格式化程序

Dan*_*rth 7 .net asp.net rest web-services asp.net-web-api

想象一下简单的控制器动作IEnumerable<BaseType> Get().它返回所有派生自BaseType的不同类型的枚举.

当客户端请求XML时,结果如下:

<ArrayOfBaseType>
    <BaseType i:type="DerivedType1"><A>value</A></BaseType>
    <BaseType i:type="DerivedType2"><B>value</B></BaseType>
    <BaseType i:type="DerivedType3"><C>value</C></BaseType>
</ArrayOfBaseType>
Run Code Online (Sandbox Code Playgroud)

如您所见,派生类的类型在i:type属性中传输.

但是,如果客户端请求JSON,则缺少此信息:

[
  {"A":"value"},
  {"B":"value"},
  {"C":"value"}
]
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

Dan*_*rth 4

需要进行以下更改:

在 WebApiConfig.cs 中,需要添加以下行:

config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = 
    TypeNameHandling.Auto;
Run Code Online (Sandbox Code Playgroud)

这将在需要时自动生成新属性$type