ASP.NET Core MVC中无法创建简单类实例并序列化JSON的问题
问题根因分析
你遇到的new hashContainer后调试显示对象为null的情况,本质是调试假象,.NET 中使用new关键字实例化正常的引用类型,除非触发内存溢出异常,否则绝对不会返回null,常见诱因如下:
- 你使用了Release配置运行程序:Release模式下编译器会自动优化未被后续代码引用的局部变量,变量被优化掉后调试器无法读取实际值,就会显示为null。你可以切换到Debug配置,重新生成解决方案后再调试即可看到变量的实际值。
- 调试符号与运行代码不匹配:你修改代码后没有重新编译,当前运行的程序版本和你编辑器里看到的代码不一致,断点绑定的行错位导致调试器读取到错误的变量值。你可以执行清理解决方案操作后重新生成,再启动调试。
- 存在同名类型冲突:你当前代码所在的命名空间下,存在另一个同名的
hashContainer类,其构造逻辑存在异常且异常被上层吞掉,同时你开启了「仅我的代码」调试选项,异常没有触发中断。你可以右键点击代码中的hashContainer选择「转到定义」,确认跳转的类是你自定义的版本即可排除该问题。
对应验证代码
你可以在实例化对象后加一行临时的输出代码,强制变量被引用,避免被优化:
public class hashContainer { public string h; public hashContainer(string s) { this.h = s; } } public IActionResult Updateuser() { ApplicationUser u = new ApplicationUser(); var hass = new hashContainer("pikkemand"); // 加临时输出,强制变量被引用,避免调试优化 Console.WriteLine(hass.h); string json = JsonConvert.SerializeObject(hass); }
加完后如果控制台能正常输出pikkemand,就说明对象实例化完全正常,只是之前的调试优化导致显示异常。
内容的提问来源于stack exchange,提问作者NotQuiteSo1337
相关产品推荐
相关产品推荐

