使用Newtonsoft.Json序列化含自定义属性对象时触发FileNotFoundException
解决Newtonsoft.Json序列化时抛出FileNotFoundException的问题
嘿,这个问题我之前折腾过几次,大概率是.NET版本与Newtonsoft.Json的兼容问题,或是程序集绑定配置出了问题,给你几个靠谱的解决方向:
检查Newtonsoft.Json与.NET框架版本的兼容性
不同版本的Newtonsoft.Json对.NET框架版本有明确要求,比如较新的13.x及以上版本需要.NET Framework 4.6.1或更高版本支持。如果你的项目基于.NET Framework 4.6以下开发,就容易出现这类程序集找不到的问题。
你可以通过NuGet包管理器调整:- 右键项目 → 管理NuGet程序包
- 找到Newtonsoft.Json,要么升级项目的.NET Framework版本到4.6.1+,要么降级Newtonsoft.Json到适配你当前.NET版本的版本(比如12.x系列适配.NET Framework 4.5+)。
添加程序集绑定重定向
很多时候是因为项目里引用的System.Runtime版本和Newtonsoft.Json期望的版本不匹配,这时需要在app.config(桌面项目)或web.config(Web项目)里添加绑定重定向,统一版本:<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <!-- 把newVersion改成你项目中实际引用的System.Runtime版本号 --> <bindingRedirect oldVersion="0.0.0.0-4.2.2.0" newVersion="4.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>查看实际版本的方法:右键项目 → 引用 → 找到System.Runtime → 查看属性面板里的版本号即可。
清理重建项目,修复引用
有时候是项目缓存导致的假问题:- 右键项目 → 清理
- 手动删除项目目录下的
bin和obj文件夹 - 重新生成项目
另外检查引用列表里的System.Runtime是否有黄色感叹号,如果有,右键选择“修复”或者通过NuGet重新安装对应的包。
验证自定义属性的影响
你可以先暂时去掉类和属性上的[CSVTable]、[CSVColumn]特性,测试JsonConvert.SerializeObject是否能正常运行。如果去掉后正常,那还是回到前面的版本兼容问题——Newtonsoft.Json在反射处理自定义属性时,对依赖的程序集版本要求更严格了。
内容的提问来源于stack exchange,提问作者ZoyuJ
相关产品推荐
相关产品推荐

