我有一个Web api控制器,并且我使用了HttpClient PostAsJsonAsync()方法;我的对象(雇员)是从基类(人)继承的,但是在将对象发布到Api之后,对象类型已更改(正确地未序列化);
这是我的课程:
在发送之前,对象类型为Employee
发送后,对象类型为“人”
请参阅附件
public class Person
{
public Guid Id { get; set; }
public String Name { get; set; }
}
public class Employee : Person
{
public int Age { get; set; }
}
public class CreateEmployeeRequest
{
public Person Person { get; set; }
}
最佳答案
发送前,对象类型为Employee。发送后,对象类型为Person。
那么,序列化就可以完美地工作了。您的CreateEmployeeRequest
对象包含一个Person
对象,而不是雇员。这就是为什么您在另一端看到它的原因。
如果您希望能够反序列化派生类,则必须使用$type
的TypeNameHandling
属性在JSON内部传递JsonSerializerSettings
标志,以指定应反序列化到哪个派生类型:
string jsonTypeNameAll = JsonConvert.SerializeObject(employeeRequest, Formatting.Indented, new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
});