【发布时间】:2015-09-21 15:27:50
【问题描述】:
我们正在使用 JSON.NET 来序列化自定义对象。我已经编写了一个单元测试,它成功地执行了我们的自定义对象的 JSON 序列化:
// Generate custom object...
var settings = new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto }; // Serializing objects referred to by abstract type, see comment at http://www.tomdupont.net/2014/04/deserialize-abstract-classes-with.html
var json = JsonConvert.SerializeObject(object, settings);
// ...Deserialize object and compare are equal
但是,在我们的 APIController 中,它处理 HTTP 请求并具有如下方法:
[HttpPost]
public ActionResult ProfileFile()
{
// Code to handle HTTP request
}
对以相同方式生成的自定义对象执行相同的序列化操作会为正在序列化的自定义对象中的自定义对象生成System.InvalidCastException 流(所有这些对象都已使用 JSON.NET 属性进行标记并具有自己的传递单元测试)。
什么会导致它在我们的网络项目中表现不同,而它在单元测试中工作?提前致谢。
【问题讨论】:
-
1) 你能分享完整的
ToString()异常吗? 2) 确保您正确设置了全局JsonSerializerSettings,请参阅stackoverflow.com/questions/13274625/… 或stackoverflow.com/questions/28552567/… -
谢谢,直到您指出(通过链接)该项目本质上使用 JSON.NET,我才意识到。 1) 由于 JSON.NET 来自 NuGet 包,因此使用 JSON.NET 的源代码进行调试很困难,因为我无法卸载 NuGet 包,而不必处理一堆其他依赖包,这是其作为 ASP 运行的关键.NET 网络应用程序。 2)感谢您的链接。尝试如问题所示调整全局设置,但无济于事。
System.InvalidCastException类型的第一次机会异常仍然相同。有什么想法吗? -
为了澄清我对上面 1) 的回应,没有调试到源代码我看不到错误的详细信息。
-
您是否尝试在符号服务器中包含srv.symbolsource.org/pdb/Public(在Visual Studio 中,转到工具-> 选项-> 调试-> 符号)。这可能允许您加载 nuget 包的符号并进一步调试此问题。您能否提供更多有关您尝试序列化的对象的信息?
标签: c# unit-testing serialization json.net web-project