我有一个像这样的对象:
public class Criteria
{
public List<Param> Parameters { get; set; }
}
对于Param,我有以下内容:
public abstract class Param {}
public class Param<T> : Param
{
public string Name { get; private set; }
public T SelectedValue { get; set; }
public QueryParameter(string name)
{
this.Name = name;
}
}
这样,当我想创建一个Criteria包时,我会做出类似的东西:
Criteria newPackage = new Criteria();
Param param1 = new Param<string>("City");
Param param2 = new Param<int>("Population");
newPackage.Parameters.add(param1);
newPackage.Parameters.add(param2);
这个想法是消费者获得这个Criteria包,并且这样做:
receivedPackage.Parameters[0].SelectedValue = "New York";
receivedPackage.Parameters[1].SelectedValue = 15820582;
SendBackToWebAPI(receivedPackage);
但是,当通过Web API传递时,不会维护类型。所以我收到这样的消息:
Could not create an instance of type Param. Type is an interface or abstract class and cannot be instantiated.
我觉得这不可修复,但也许有另一种方法可以完成我正在做的事情?
为了更加清晰:这里的目标是消费者不知道标准是什么。他们想知道一些事情,但要获得这些信息,需要特定的标准。所以我通过了他们必须填写的一套标准,然后他们填写并发送回来。然后我使用这些条件参数来填充我的查询,然后像往常一样传回普通对象。