【问题标题】:JSON.NET Serialization Behaves Differently in ApiControllerJSON.NET 序列化在 ApiController 中的行为不同
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-27
    • 2021-05-04
    • 1970-01-01
    相关资源
    最近更新 更多