JObject 属性 上的 FluentValidation 以验证 MustBeSafeJson()

FluentValidation on JObject property to validate MustBeSafeJson()

JObject 属性 MyCustomField 将有 json 数据。我需要使用 MustBeSafeJson()MaximumLength(500) 进行验证。我不确定什么是正确的语法。我尝试了以下操作,但它对任何语法都会抛出相同的错误。 这是一个 ASP.Net 核心 Web Api 应用程序。

public class MyClass
{
    public int Id { get; set; }
    public JObject MyCustomField { get; set; }
}


RuleFor(x => x.MyCustomField).  //does not show any of the validation choices like MustBeSafeJson()

尝试过

RuleFor(x => x.MyCustomField.ToSerializedString()).MustBeSafeJson();
RuleFor(x => x.MyCustomField.ToString()).MustBeSafeJson();

错误信息

Error
    "errorModel:"{
        "value":{
            "":[
                "'' cannot contain certain symbol characters."
            ]
        }
    }

我没有清楚地理解MustBeSafeJson()应该做什么。但是您可以使用以下代码在 JObject 上编写自己的验证。

 public MyClass_Validation()
 {
     RuleFor(x => x.MyCustomField).Must(x => SAFE_JSON(x, 500));
 }


 private bool SAFE_JSON(JObject arg,int maxSize = 1024)
 {
     ///ValidationLogic goes here      
 }

我如何在评论中告诉你,你应该将 json 字符串传递给验证器或在其中序列化它,请遵循完整示例:

public class Program
{
    public static void Main()
    {
        var myClass = new MyClass
        {
            MyCustomField = new JObject
            {
                { "FieldA", "A" },
                { "FieldB", "B" }
            }
        };
        var result = new Validator().Validate(myClass);
    }
}

public class MyClass
{
    public int Id { get; set; }
    public JObject MyCustomField { get; set; }
}

public class Validator : AbstractValidator<MyClass>
{
    public Validator()
    {
        RuleFor(x => x.MyCustomField).Must(MustBeSafeJson);
    }

    private bool MustBeSafeJson(JObject arg)
    {
        var jsonString = JsonConvert.SerializeObject(arg);
        return RunValidatingRules(jsonString);
    }

    private bool RunValidatingRules(string jsonString)
    {
        //execute your rules
        throw new NotImplementedException();
    }
}

要查看验证结果,只需检查错误 属性 result.Errors。如果result.IsValidreturns false,就会有东西