C#Web API派生类型未序列化

问题描述

我需要在Db中存储各种类型的字段。我拥有具有所有公共属性的基本字段类,并且为每种字段类型都提供了具有特定属性的派生类。

public class BaseField
{
   public string ID{get;set;}
   public string Name{get;set;}
}

public class CheckBoxField:BaseField
{
   public bool Checked{get;set;}
}

我有一个asp.net核心Web API方法,该方法接受BaseField作为参数。当我尝试保存CheckBoxField类型的对象时,总是将其转换为BaseField。我知道该参数的类型为BaseField,因此始终会序列化为BaseField,但是我想知道如何使用相同的方法来处理保存复选框字段。

解决方法

我有一个asp.net核心Web API方法,该方法接受BaseField作为参数。当我尝试保存CheckboxField类型的对象时,总是将其转换为BaseField。

是的,这实际上是应该起作用的,因为您的方法接受基类,并且用派生类型调用它,这将使它强制返回基类。

我知道由于参数的类型为BaseField,因此它始终会序列化为BaseField,但是我想知道如何使用相同的方法来处理保存复选框字段。

好吧,我们首先在这里了解一个主要问题,您是否实际上DB表具有Checked列,或者您有一个用于Base类的表,另一个用于Checkbox。

如果答案是肯定的,则您的数据库表具有Checked列以及来自BaseField的其他列,然后基本上替换您的方法以接受CheckboxField而不是{{1} }作为参数。

注意:如果在使用BaseField参数调用该方法的情况下,如果仍然需要Checked值的默认值,则可以为这种特殊情况创建方法覆盖:

BaseField