我有一个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对象,而不是雇员。这就是为什么您在另一端看到它的原因。

如果您希望能够反序列化派生类,则必须使用$typeTypeNameHandling属性在JSON内部传递JsonSerializerSettings标志,以指定应反序列化到哪个派生类型:

string jsonTypeNameAll =   JsonConvert.SerializeObject(employeeRequest,  Formatting.Indented, new JsonSerializerSettings
{
    TypeNameHandling = TypeNameHandling.All
});

09-20 09:46