7

想象一个简单的控制器动作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>

可以看到,派生类的类型是在i:type属性中传递的。

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

[
  {"A":"value"},
  {"B":"value"},
  {"C":"value"}
]

如何解决这个问题?

4

2 回答 2

4

以下更改是必要的:

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

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

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

于 2012-10-09T10:45:40.783 回答
0

如果你写你的类如下:

public class MyClass
{
    // properties here

    public string IType
    {
        get
        {
            return this.GetType().Name;
        }

        set {  }
    }
}

也许,它会帮助你

于 2012-09-29T10:36:51.517 回答