Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to specify polymorphic type in ASP.NET mvc 6

I could use "TypeNameHandling = TypeNameHandling.Auto" in previous version of MVC. In MVC6, I have following class

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;}
}

In my webapi, JSON result will be the following

[
    {Id: "1", Name: "peter", Address: "address1"},
    {Id: "2", Account: "mary", Password: "1234"}
]

But I want the following result:

[
    {$type: "Foo", Id: "1", Name: "peter", Address: "address1"},
    {$type: "Bar", Id: "2", Account: "mary", Password: "1234"}
]
like image 640
oneroan Avatar asked Dec 17 '15 03:12

oneroan


1 Answers

You can add new field: type at BaseClass and initialize it at constructor:

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

    public readonly string type;
    public BaseClass()
    {
        type = this.GetType().Name;
    }
}

At Foo class instances it will be "Foo", at Bar - "Bar".

like image 50
Slava Utesinov Avatar answered Oct 19 '22 21:10

Slava Utesinov