【发布时间】:2019-01-22 12:10:26
【问题描述】:
我们的应用程序使用验证属性来利用 ASP.NET 模型验证,但是这为验证错误提供了点分隔的名称。当通过CamelCasePropertyNamesContractResolver 时,这仅适用于第一个点之前的驼峰式,而我们希望将驼峰式应用于名称的每个部分。
例如我们当前获取当前的json响应:
{
"body.State": [
"The state field is required."
],
"body.LatestVersion": [
"The latestVersion field is required."
]
}
但是想出去:
{
"body.state": [
"The state field is required."
],
"body.latestVersion": [
"The latestVersion field is required."
]
}
在我们的 MVC 设置中,我们确实有一行类似于
services.AddJsonOptions(options => options.ContractResolver = new CamelCasePropertyNamesContractResolver());
我们非常感谢任何解决方案,无论是对我们如何设置解析器的修改,还是我们如何修改验证。
编辑:仅供参考,生成此请求的请求的模型结构如下:
public sealed class RequestModel
{
[FromRoute, DisplayName("entity"), Required, MaximumLength(255)]
public string Entity { get; set; }
[FromBody, DisplayName("body"), Required]
public BodyModel Body { get; set; }
}
public sealed class BodyModel
{
[DisplayName("latestVersion"), Required, MaximumLength(255)]
public string LatestVersion { get; set; }
[DisplayName("state"), Required]
public ModelState State { get; set; }
}
并且正在发送的请求正文是:
{
}
【问题讨论】:
-
JSON 与您的模型完全不匹配,
RequestModel和BodyModel都不会生成问题中显示的 当前 json 响应。您是否使用从this answer 到Can I specify a path in an attribute to map a property in my class to a child property in my JSON? 的JsonPathConverter之类的东西? -
您是否认为这是验证生成的自动响应?我知道仅使用 JSON.Net 对其进行序列化不会产生响应,但我们是从内置的模型验证系统中获得的。我们在系统中的任何地方都没有 JsonPathConverter。
-
在这种情况下,我不确定在序列化之前自动响应的 c# 数据模型是什么。但如果是
Dictionary<string, List<string>>,那么我可以告诉你怎么做。 -
它确实在引擎盖下表示为某种形式的字典,是的。我相信它是一个ModelStateDictionary,它是一个
string到ModelStateEntry,它似乎在其中的某处保存了一个验证错误列表。 -
@dbc 你能详细说明一下字典的解决方案吗?
标签: asp.net-mvc json.net camelcasing