场景:

 public abstract class JsonCreationConverter<T> : JsonConverter
{
/// <summary>
/// this is very important, otherwise serialization breaks!
/// </summary>
public override bool CanWrite
{
get
{
return false;
}
}
/// <summary>
/// Create an instance of objectType, based properties in the JSON object
/// </summary>
/// <param name="objectType">type of object expected</param>
/// <param name="jObject">contents of JSON object that will be
/// deserialized</param>
/// <returns></returns>
protected abstract T Create(Type objectType, JObject jObject); public override bool CanConvert(Type objectType)
{
return typeof(T).IsAssignableFrom(objectType);
} public override object ReadJson(JsonReader reader, Type objectType,
object existingValue, JsonSerializer serializer)
{
if (reader.TokenType == JsonToken.Null)
return null;
// Load JObject from stream
JObject jObject = JObject.Load(reader); // Create target object based on JObject
T target = Create(objectType, jObject); // Populate the object properties
serializer.Populate(jObject.CreateReader(), target); return target;
} public override void WriteJson(JsonWriter writer, object value,
JsonSerializer serializer)
{
throw new NotImplementedException();
}
}
  [JsonConverter(typeof(UserConverter))]
public class User
{ private class UserConverter : JsonCreationConverter<User>
{
protected override User Create(Type objectType, Newtonsoft.Json.Linq.JObject jObject)
{
if (jObject.Property("Course") !=null)
{
return new Student();
}
else if (jObject.Property("WorkerType") != null)
{
return new Worker();
}
else
{
return new User ();
}
}
} public string Name { get; set; }
public int Id { get; set; }
} public class Student : User
{
public string Course { get; set; }
} public class Worker : User
{
public string WorkerType { get; set; }
}
        [Route("api/Employee/AddUsers/")]
public void AddUsers(List<User> users)
{ User s = users[] as User;
Student s1= users[] as Student;
Worker s2 = users[] as Worker; s1 = users[] as Student;
if (s1 != null)
{ }
//[{"Name":"1","Id":1},{"Course":"2","Name":"2","Id":2},{"WorkerType":"3","Name":"3","Id":3}]
}

最新文章

  1. Rank() 、DENSE_RANK()、NTILE(n)的用法-转
  2. DISCUZ 自定义模板
  3. 小白学Linux(二)--命令行基本操作
  4. php实现多任务并发探讨
  5. Winsock IOCP模型(四篇)
  6. linux read和write函数
  7. 【HTML5 1】39个让你受益的HTML5教程
  8. 了解JavaScript的执行上下文
  9. Android——SQLite实现面向对象CRUD
  10. 《炉石传说》建筑设计欣赏(6):卡&amp;amp;在执行数据时,组织能力
  11. 为大数据软件准备JAVA、Python环境
  12. dubbo+zookeeper伪集群配置
  13. ADALINE模型
  14. IT连创业系列:近期功能调整(小魔术功能从二级目录调整到一级栏目)
  15. MySQL(三)用正则表达式搜索
  16. MonkeyRunner_手机触摸屏幕坐标获取
  17. 网工最实用最常用的网络命令之一——Ping 命令详解(一)
  18. JQuery 之 重置表单的方法
  19. 洛谷 P2764 最小路径覆盖问题【最大流+拆点+路径输出】
  20. 《FPGA全程进阶----实战演练》第二章之系统搭建

热门文章

  1. drone 1.0 新功能试用以及说明
  2. Bat相关的项目应用
  3. [转]总结@Autowired 和@Resource
  4. java-plupload上传大文件
  5. 使用FormsAuthenticationTicket进行登陆验证
  6. NLP自然语言处理中的hanlp分词实例
  7. C#3.0:新特性
  8. Github访问慢解决办法
  9. DOM confirm setTimeout url刷新
  10. messageBox 的几种显示方式