c# - 在从 JSON 反序列化期间对所有属性调用 Web API 访问器

标签 c# json asp.net-mvc asp.net-web-api

关于将数据映射到我的 Web API 中的模型,我遇到了一个非常令人费解的问题。它有点复杂,如果我解释得不够好,请告诉我,我会尽力详细说明。

见编辑2,问题变了

我有一个 MVC 5 应用程序,用户在其中提交表单数据,该数据会根据 JSON 中字段名称与模型成员名称的匹配自动映射到模型。例如,如果用户名的传入 JSON 格式为:

{Id=0, Name=testName}

然后会有一个名为(仅示例名称)UsernameModel 的模型,它具有一个 int id 和一个 string name 以及其他属性不需要从 JSON 映射(有许多这些模型用于许多不同的形式)。

我不确定它会有多大用处,但我注意到堆栈跟踪底部的调用是

System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren(
ModelMetadata metadata, ValidationContext validationContext, Object container,
IEnumerable`1 validators)

这个Validation 是否与我的问题有关?

我们都不知道为什么会发生这种情况,而且只发生在我的机器上。有什么想法/建议吗?要尝试的事情?缩小误差范围的方法?

编辑找到another question这可能是相关的,但很奇怪这只发生在我的电脑上,而在那篇文章中它只是一个普遍问题。

编辑 2:我已经缩小了问题范围,现在有一个更具体的问题。我发现在我的计算机上,Web API 将 JSON 映射到 C# 对象(或在映射期间调用的其他一些进程)在映射对象的过程中为每个属性调用 get() .这就是抛出异常的原因;当调用 get() 时(按设计),其中一个属性会抛出异常。在其他人的计算机上,get() 仅在那些由 JSON 映射到的属性上调用,我们不确定为什么。

编辑 3(修订版): 在研究 System.Web.Http.Validation 时,我发现了 this post询问如何禁用它。我按照接受的答案中的说明进行操作并禁用了默认验证,我的问题就消失了!我仍然想知道为什么两台计算机之间会有所不同,但至少我有所收获!

最佳答案

相同的应用程序代码在两台计算机上表现如此不同的可能性不大。这不是不可能,只是不太可能。

当发生几乎不可能发生的事情时,质疑每一个细节。在这种情况下,请质疑您是否实际上在两个地方执行相同的代码。确保你们中的任何一个人没有来自源代码管理的过时版本的代码。检查您引用的库的版本。看看是否有人有不同的 web.config。如有必要,在这两个地方单步执行代码。

我不知道它是什么,但我 90% 肯定你会发现你会得到不同的行为,因为你正在执行一些稍微不同的事情。

关于c# - 在从 JSON 反序列化期间对所有属性调用 Web API 访问器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38363479/

相关文章:

asp.net-mvc - 编辑器模板中的单选按钮

c# - mvc c# 中的安全 id 值

javascript - 如何将 JavaScript 和 JQuery 代码从 MVC View 移动到 Visual Studio 2017 的外部 .js 文件?

c# - 将路径转换为其 GUID 形式

c# - 将整数数组发布到 asp.net web api

c# - 在 VS 2012 项目中启用 System.Net.Http

java - 如何使用 GSON 解码字符串对列表?

c# - Nhibernate - 在 QueryOver.IsLike 中使用列值

c# - .net 应用程序的非托管堆大小

java - 我如何在 Java 中解析这个 JSON?