public abstract class AbstractSearch
{
public string Property { get; set; }
public string TargetTypeName { get; set; }
}
public class DateSearch : AbstractSearch
{
public DateTime? SearchTerm { get; set; }
public DateComparators Comparator { get; set; }
}
public enum DateComparators
{
Less,
LessOrEqual,
Equal,
GreaterOrEqual,
Greater,
InRange
}
public class SearchViewModel
{
public IEnumerable<AbstractSearch> SearchCriteria { get; set; }
}
如何从clientside JSON传递上述属性到SearchViewModel类。
我需要通过Json将Property,TargetTypeName,SearchTerm,Comparator从javascript传递给webapi。
我使用Web api 2.0作为Serverside。是否可以将Json参数传递给Inherited类?
答案 0 :(得分:1)
如果在客户端序列化时指定具体类型,则可以使用TypeNameHandling使其工作。您可以使用JSON中的$type
属性指定类型。
模型绑定器无法实例化抽象类。
配置JSON.NET:
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto;
然后以这种格式发布您的JSON:
{
"$type": "Namespace.DateSearch, AssemblyName"
"Property": "..."
"etc": ""
}