2015-07-03 61 views
3

我们使用JSON.NET来序列化自定义对象。我写了执行我们的自定义对象的JSON序列化成功的一个单元测试:JSON.NET序列化在ApiController中表现不同

// 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属性进行标记并具有自己的传递单元测试)。

什么会导致它在我们的Web项目中表现不同,而它在单元测试中起作用?提前致谢。

+2

1)你可以共享例外的完整'ToString()'吗? 2)确保你正确设置了你的全局'JsonSerializerSettings',参见http://stackoverflow.com/questions/13274625/how-to-set-custom-jsonserializersettings-for-json-net-in-mvc-4- web-api或http://stackoverflow.com/questions/28552567/web-api-2-how-to-return-json-with-camelcased-property-names-on-objects-and-the – dbc

+0

谢谢,我didn直到你指出(通过链接),这个项目本质上是使用JSON.NET。 1)由于JSON.NET通过NuGet包进行调试,因此使用JSON.NET源代码进行调试非常困难,因为我无法卸载NuGet包而无需处理其他相关包密钥的纠结,从而使其作为ASP .NET Web应用程序。 2)感谢您的链接。试图调整全球设置,如问题所示,但无济于事。 “System.InvalidCastException”类型的第一个机会异常仍然是相同的。有任何想法吗? –

+0

为了澄清我对上述1)的回应,无需调试源代码,我看不到错误的详细信息。 –

回答

0

不知道要尝试序列化的对象的确切内容,很难提供确切的解决方案。但是,如果我处于您的情况,我会创建一个基本的类来表示您的自定义对象并尝试序列化它。如果您继续看到该错误,我会开始将JsonIgnore属性添加到类的不同属性中,以查看哪个属性实际上导致此故障。这将有助于缩小问题范围。