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

设想一个简单的控制器操作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"}
]

如何解决这个问题?


以下更改是必要的:

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

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

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


如果你写下你的课程:

public class MyClass
{
    // properties here

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

        set {  }
    }
}

也许,它会帮助你

链接地址: http://www.djcxy.com/p/64227.html

上一篇: Inheritance and the JSON formatter of ASP.NET Web API

下一篇: Cocoa: AVAsset from raw data (i.e. NSData)