如何将json数据传递给抽象类?

时间:2017-03-16 14:38:23

标签: c# json

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类?

1 个答案:

答案 0 :(得分:1)

如果在客户端序列化时指定具体类型,则可以使用TypeNameHandling使其工作。您可以使用JSON中的$type属性指定类型。

模型绑定器无法实例化抽象类。

配置JSON.NET:

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.TypeNameHandling = TypeNameHandling.Auto;

然后以这种格式发布您的JSON:

{
    "$type": "Namespace.DateSearch, AssemblyName"
    "Property": "..."
    "etc": ""
}