Newtonsoft.Json 序列化器的重写
- public class TestConverter : JsonConverter
- {
- public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
- {
- //Type valueType = value.GetType();
- //if (valueType.IsArray)
- //{
- // var jArray = new JArray();
- // foreach (var item in (IEnumerable)value)
- // jArray.Add(JToken.FromObject(item, serializer));
- // jArray.WriteTo(writer);
- //}
- //else
- //{
- // JProperty typeHintProperty = TypeHintPropertyForType(valueType);
- // var jObj = new JObject();
- // if (typeHintProperty != null)
- // jObj.Add(typeHintProperty);
- // foreach (PropertyInfo property in valueType.GetProperties(BindingFlags.Public | BindingFlags.Instance))
- // {
- // if (property.CanRead)
- // {
- // object propertyValue = property.GetValue(value, null);
- // if (propertyValue != null)
- // jObj.Add(property.Name, JToken.FromObject(propertyValue, serializer));
- // }
- // }
- // jObj.WriteTo(writer);
- //}
- }
- public override bool CanWrite => false;
- public override object ReadJson(JsonReader reader, Type objectType, object existingValue,
- JsonSerializer serializer)
- {
- // Load JObject from stream
- JObject jObject = JObject.Load(reader);
- Type targetType;
- JToken typeStr;
- //JToken varl;
- if (!jObject.TryGetValue("_t", out typeStr))
- {
- targetType = objectType;
- }
- else
- {
- var scrName = typeStr.ToString();
- if (scrName.Contains("."))
- {
- scrName = scrName.Substring(scrName.LastIndexOf(".", StringComparison.Ordinal)+);
- }
- targetType = PropertyHintTypeForStr(scrName);
- }
- // Displaying output.
- var target = Activator.CreateInstance(targetType);
- serializer.Populate(jObject.CreateReader(), target);
- return target;
- }
- public override bool CanConvert(Type objectType)
- {
- return typeof(BaseTest).IsAssignableFrom(objectType);
- }
- //public override bool CanRead=>false;
- private Type PropertyHintTypeForStr(string typeStr)
- {
- Type result;
- switch (typeStr)
- {
- case nameof(BaseTest):
- result = typeof(BaseTest);break;
- case nameof(TestA):
- result = typeof(TestA); break;
- case nameof(TestB):
- result = typeof(TestB); break;
- case nameof(TestC):
- result = typeof(TestC); break;
- case nameof(TestD):
- result = typeof(TestD); break;
- case nameof(TestE):
- result = typeof(TestE); break;
- case nameof(TestX):
- result = typeof(TestX); break;
- default:
- result = typeof(BaseTest); break;
- }
- return result;
- }
- }
Newtonsoft.Json 序列化器的重写的更多相关文章
- ASP.NET MVC4 json序列化器
ASP.NET MVC4中调用WEB API的四个方法 2012年06月07日00:05 it168网站原创 作者:廖煜嵘 编辑:景保玉 我要评论(0) [IT168技术]当今的软件开发中,设计软件的 ...
- Newtonsoft.Json 序列化和反序列化 以及时间格式 2 高级使用
手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多次修改中,实体添加了很多字段用于中间计算或者存储,然后最终用Newtonsoft.Json进行序列化返回数 ...
- [C#][Newtonsoft.Json] Newtonsoft.Json 序列化时的一些其它用法
Newtonsoft.Json 序列化时的一些其它用法 在进行序列化时我们一般会选择使用匿名类型 new { },或者添加一个新类(包含想输出的所有字段).但不可避免的会出现以下情形:如属性值隐藏(敏 ...
- C# 使用Newtonsoft.Json序列化自定义类型
Json.Net是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单.通过Linq To JSON可以快速的读写Json,通过JsonSerializ ...
- c# 使用 Newtonsoft.Json 序列化json字符串以及,反序列化对象
1. 序列化 对象 /** 使用 Newtonsoft.Json 序列化对象 **/ [WebMethod] public String getPersonInfos() { // 初始化数据 Lis ...
- Newtonsoft.Json序列化日期时间去T的几种方式。
原文地址:MVC web api 返回JSON的几种方式,Newtonsoft.Json序列化日期时间去T的几种方式. http://www.cnblogs.com/wuball/p/4231343. ...
- MVC web api 返回JSON的几种方式,Newtonsoft.Json序列化日期时间去T的几种方式。
原文链接:https://www.muhanxue.com/essays/2015/01/8623699.html MVC web api 返回JSON的几种方式 1.在WebApiConfig的Re ...
- Newtonsoft.Json 序列化踩坑之 IEnumerable
Newtonsoft.Json 序列化踩坑之 IEnumerable Intro Newtonsoft.Json 是 .NET 下最受欢迎 JSON 操作库,使用起来也是非常方便,有时候也可能会不小心 ...
- NetworkComms V3 使用Json序列化器进行网络通信
刚才在网上闲逛,偶然看到一篇文章 C#(服务器)与Java(客户端)通过Socket传递对象 网址是:http://www.cnblogs.com/iyangyuan/archive/2012/12/ ...
随机推荐
- Cloudstack系统配置(三)
系统配置 CloudStack提供一个基于web的UI,管理员和终端用户能够使用这个界面.用户界面版本依赖于登陆时使用的凭证不同而不同.用户界面是适用于大多数流行的浏览器包括IE7,IE8,IE9,F ...
- vuejs2.0 vue实例的生命周期
每个 Vue 实例在被创建之前都要经过一系列的初始化过程.例如,实例需要配置数据观测(data observer).编译模版.挂载实例到 DOM ,然后在数据变化时更新 DOM .下图展示的就是一个v ...
- 设计模式之————依赖注入(Dependency Injection)与控制反转(Inversion of Controller)
参考链接: 依赖注入(DI) or 控制反转(IoC) laravel 学习笔记 —— 神奇的服务容器 PHP 依赖注入,从此不再考虑加载顺序 名词解释 IoC(Inversion of Contro ...
- 15 Most Read Data Science Articles in 2015. So far …
15 Most Read Data Science Articles in 2015. So far … We've compiled the latest set of "most rea ...
- Java并发编程原理与实战十三:JDK提供的原子类原理与使用
原子更新基本类型 原子更新数组 原子更新抽象类型 原子更新字段 原子更新基本类型: package com.roocon.thread.t8; import java.util.concurren ...
- Java并发编程原理与实战九:synchronized的原理与使用
一.理论层面 内置锁与互斥锁 修饰普通方法.修饰静态方法.修饰代码块 package com.roocon.thread.t3; public class Sequence { private sta ...
- 手机中的js事件
// 手势事件 touchstart //当手指接触屏幕时触发 touchmove //当已经接触屏幕的手指开始移动后触发 touchend //当手指离开屏幕时触发 touchcancel // 触 ...
- Elasticsearch技术解析与实战(二)文档的CRUD操作
启动Elasticsearch和kibana 访问Elasticsearch:http://localhost:9200/?pretty 访问kibana:http://localhost:5601 ...
- soj1166. Computer Transformat(dp + 大数相加)
1166. Computer Transformat Constraints Time Limit: 1 secs, Memory Limit: 32 MB Description A sequenc ...
- HDU 2087 剪花布条 (KMP 不允许重叠的匹配)
题目链接 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Inp ...