想象一个简单的 Controller Action oj​​it_code。它返回均源自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>

如您所见,派生类的类型在IEnumerable<BaseType> Get()属性中传输。

但是,如果客户端请求JSON,则会丢失此信息:
[
  {"A":"value"},
  {"B":"value"},
  {"C":"value"}
]

如何解决这个问题?

最佳答案

必须进行以下更改:

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

config.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling =
    TypeNameHandling.Auto;

需要时,这将自动产生新的属性$type

10-05 22:03