如何在ASP.NET mvc 6中指定多态类型

one*_*oan 11 c# polymorphism asp.net-core-mvc

我可以在以前版本的MVC中使用"TypeNameHandling = TypeNameHandling.Auto".在MVC6中,我有以下课程

public class BaseClass {
    public string Id {get;set;}
}
public class Foo : BaseClass {
    public string Name {get;set;}
    public string Address {get;set;}
}
public class Bar : BaseClass {
    public string Account {get;set;}
    public string Password {get;set;}
}
Run Code Online (Sandbox Code Playgroud)

在我的webapi中,JSON结果如下

[
    {Id: "1", Name: "peter", Address: "address1"},
    {Id: "2", Account: "mary", Password: "1234"}
]
Run Code Online (Sandbox Code Playgroud)

但我想要以下结果:

[
    {$type: "Foo", Id: "1", Name: "peter", Address: "address1"},
    {$type: "Bar", Id: "2", Account: "mary", Password: "1234"}
]
Run Code Online (Sandbox Code Playgroud)

Sla*_*nov 1

您可以添加新字段:在 BaseClass 中键入并在构造函数中初始化它:

public class BaseClass {
    public string Id {get;set;}

    public readonly string type;
    public BaseClass()
    {
        type = this.GetType().Name;
    }
}
Run Code Online (Sandbox Code Playgroud)

在 Foo 类实例中它将是“Foo”,在 Bar 中是“Bar”。