简介:本人在开发webapi接口时遇到了:一个复杂的json字符串在反序列化为对象时报,无法发序列化其中的一个属性对象?
使用方法:
InternalRecommendRequestFormModel formData = Newtonsoft.Json.JsonConvert.DeserializeObject<InternalRecommendRequestFormModel>(dataInput);
其中:InternalRecommendRequestFormModel是一个复杂的对象,属性中又包含其他对象和属性。 dataInput是接口传入的JSON字符串,它是另一个接口返回的InternalRecommendRequestFormModel对象,当然数据在传递的过程中一些属性发生了变化,按理应该可以正常反序列化,但是在使用的时候却在反序列化是报错,无法发序列化其中一个属性。
那么我们遇到这种复杂的反序列化成对象时该怎么办?
首先:分析知道,报错是由于个别属性发序列化失败导致,那么只要可以将这部分属性清空或者移除该属性的序列化内容,就可以了。
那么:如何在序列化的JSON字符串移除掉一部分属性呢?
我们首先想到的是,字符串的替换,清空,截取等等,但是想想容易出错。能不能现将这个字符串变成一个可操作的对象(当然不是InternalRecommendRequestFormModel),然后干掉或者清空某个对象后再转换成我们想要的对象? 其实我一开想想到object,不是任意对象都是object吗?
开始尝试:
object formData = Newtonsoft.Json.JsonConvert.DeserializeObject<object>(dataInput);
得到对象如下:

在调试中发现:
((Newtonsoft.Json.Linq.JObject)(JsonConvert.DeserializeObject
也就是说,通过上述代码可以看出,反序列化的object对象被转换为了:Newtonsoft.Json.Linq.JObject 对象, 这个对象就是微软给我们提供的JSON对象的一个基类,也就是说,只要你是一个对象,如果被json序列化后,它就可以帮你反序列化回来。
代码改进为:
InternalRecommendRequestFormModel formData = new InternalRecommendRequestFormModel();Newtonsoft.Json.Linq.JObject obj = JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(dataInput);
obj.Remove("opinions");
formData = obj.ToObject<InternalRecommendRequestFormModel>();
总结:
只要JSON字符串是一个对象,当我们直接反序列化遇到,字符串中的部分属性值不符合要求时,我们可以先将对象转为:JObject,对对象属性修正后,再使用JObject提供的ToObject
<strong><span style="font-size: 15px">Newtonsoft.Json.Linq.JObject obj = JsonConvert.DeserializeObject<Newtonsoft.Json.Linq.JObject>(dataInput);</span></strong><br/>
编辑推荐:
- 属性值反序列化失败怎么解决?02-21
- 让WebAPI 返回JSON格式的数据实例教程02-21
- 契约类相关的序列化与反序列化实例详解02-21
- type=file的change事件只能执行一次的问题及解决方法实例02-21
- C# 定时器Timer的实例介绍02-21
- 分享GTS-800二次开发流程步骤02-21
- 解决 ASP.NET Core MySql varchar 字符串截取实例教程02-21
- dotnet 命令如何使用?02-21
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 属性值反序列化失败怎么解决?
属性值反序列化失败怎么解决?
26-02-21 - 让WebAPI 返回JSON格式的数据实例教程
让WebAPI 返回JSON格式的数据实例教程
26-02-21 - 契约类相关的序列化与反序列化实例详解
契约类相关的序列化与反序列化实例详解
26-02-21 - dotnet 命令如何使用?
dotnet 命令如何使用?
26-02-21 - 总结委托和事件的联系和区别
总结委托和事件的联系和区别
26-02-21 - 用Shape做动画实例代码
用Shape做动画实例代码
26-02-21 - asp.net MVC 网站图片怎么实现防盗链?
asp.net MVC 网站图片怎么实现防盗链?
26-02-21 - 使用一个WPF程序起调一个UWP程序
使用一个WPF程序起调一个UWP程序
26-02-21 - C# 实现截图功能的操作实例
C# 实现截图功能的操作实例
26-02-21 - UWP中使用Composition API实现吸顶的实例教程
UWP中使用Composition API实现吸顶的实例教程
26-02-21
