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/ ...
随机推荐
- svnsync备份
参考:https://www.cnblogs.com/zz0412/p/svnsync.html https://blog.csdn.net/windone0109/article/details/4 ...
- qsort和sort
sort()函数是C++中的排序函数其头文件为:#include<algorithm>头文件: qsort()是C中的排序函数,其头文件为:#include<stdlib.h> ...
- tp5.1 入口文件即报错
---------------------------------------------------------------[ 2018-10-10T10:51:49+08:00 ] 218.93. ...
- 类python中高级用法
1. __call__用法 class Foo: def __init__(self): print('init') def __call__(self, *args, **kwargs): prin ...
- IOS计算文字高度
1.计算文字长度 NSString* str = @"你好"; .f; NSStringDrawingOptions options = NSStringDrawingUsesLi ...
- const引用与非const引用
void print1(int a) { cout<<a<<endl; } void print2(const int& a) { cout<<a<& ...
- python---web微信开发
一:轮询,长轮询,WebSocket了解 轮询: 在前端,设置时间内,一直向后端发送请求.例如:使用setInterval方法设置定时器,一秒向后端发送一次请求,去主动获取数据,进行更新由于前端一直请 ...
- css table 合并单元格
1. css table 合并单元格 colspan:合并列, rowspan:合并行, 合并行的时候,比如rowspan="2",它的下一行tr会少一列: 合并列的时候,比如co ...
- CentOS6.5本地yum源配置
1. 建立本地源目录及挂载临时目录 2. 挂载光盘 3. 进入/etc/yum.repos.d/目录,将 CentOS-Base.repo CentOS-Debuginfo.repo CentOS-V ...
- MacBook Air网络问题
自从买了本本之后,一直觉得无线网连接不能正常使用,最开始觉得是网络不给力,因为图标都没有满格.后来搬家,网速家里的window,iphone设备都能正常使用,就我的mac 本本图标显示满格,但是网页打 ...