json - 如何序列化具有来自各个属性的所有验证属性的模型?

标签 json asp.net-mvc-3 serialization json.net validationattribute

上下文:使用 mvc Controller 方法创建一个 jsonP 服务,该方法提供包含所有验证规则的表单字段定义。

我的问题是我不知道如何序列化验证属性。在常规 Mvc View 中使用不显眼的验证时,我更喜欢采用与 Razor 序列化相同格式的验证属性。

为了序列化为 json,我使用 NewtonSoft.Json (4.0.2)。

模型示例:
公共(public)类简介{

    [Required(ErrorMessage="This field is required.")]
    [StringLength(25, ErrorMessage="Max 25 chars.")]
    public string Firstname{get;set;}
    }

首选序列化 javascript 示例:
     {"Firstname": "John", 
      "ValidationRules":[{"data-val-required":"This field is required.", "data-val-length-max":25, "data-val-length":"Max 25 chars." }]}

非常感谢任何帮助或指示。

最佳答案

这将构造一个字典,其中包含基于数据注释属性的给定属性的验证属性:

var metadata = ModelMetadataProviders.Current.GetMetadataForProperty(null, typeof(MyModel), "MyProperty");
var validationRules = metadata.GetValidators(ControllerContext).SelectMany(v => v.GetClientValidationRules());
var validationAttributes = new Dictionary<string, string>();

foreach (ModelClientValidationRule rule in validationRules)
{
    string key = "data-val-" + rule.ValidationType;
    validationAttributes.Add(key, HttpUtility.HtmlEncode(rule.ErrorMessage ?? string.Empty));
    key = key + "-";
    foreach (KeyValuePair<string, object> pair in rule.ValidationParameters)
    {
        validationAttributes.Add(key + pair.Key,
            HttpUtility.HtmlAttributeEncode(
                pair.Value != null ? Convert.ToString(pair.Value, CultureInfo.InvariantCulture) : string.Empty));
    }
}

然后,您应该在自定义 JSON 序列化代码中使用您的属性序列化 validationAttributes 字典。

关于json - 如何序列化具有来自各个属性的所有验证属性的模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6412397/

相关文章:

java - 反序列化外部类的对象

java - 为什么这个 JSON 文件数据没有正确保存到 Java 对象中?

javascript - 未根据 native 脚本中的 json api 的请求加载

asp.net-mvc - 我可以在 MVC3 中为同一个类使用多个编辑器模板吗?

javascript - 如何使用 html.beginform 从服务器端获取结果?

java.io.InvalidClassException : serialization from string to object fail java

java - Spring MVC 3 -> 验证

javascript - JSON连接数据之间如何进行操作?

.net - "Operation could destabilize the runtime"尝试从 MVC3 升级到 MVC4 时

java - 无法编码可序列化数据的值(value)