gpt4 book ai didi

c# - Json.NET 不识别数据注释并允许数据通过

转载 作者:行者123 更新时间:2023-11-30 15:24:41 24 4
gpt4 key购买 nike

我有以下代码:

public class EventController : ApiController
{
//public IHttpActionResult Post(List<Event> Events)
public IHttpActionResult Post(Newtonsoft.Json.Linq.JArray J)
{
//Debug.WriteLine(J.ToString());

List<Event> Events = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Event>>(J.ToString(), new Newtonsoft.Json.JsonSerializerSettings {
Error = delegate(object sender, ErrorEventArgs args) {
Debug.WriteLine(args.ErrorContext.Error.Message);
args.ErrorContext.Handled = true;
},
Converters = { new IsoDateTimeConverter() }
}
);

foreach (Event Event in Events)
{
Debug.WriteLine(Event.Importance.ToString());
Debug.WriteLine(Event.Date.ToString());
Debug.WriteLine(Event.Description);
}
}
}

public class Event
{
[DataAnnotationsExtensions.Integer(ErrorMessage = "{0} must be a number.")]
[Range(0,10),Required]
public Int32 Importance { get; set; }

//[OnConversionError: "Please enter a valid date."]
[Required]
[DataAnnotationsExtensions.Date]
public object Date { get; set; }

[RegularExpression(@"^.{20,100}$", ErrorMessage="{0} must be between 20 and 100 characters.")]
[Required]
public string Description { get; set; }
}

我正在发布:

[{"Importancee":"adasdasd","Date":"2005-10-32","Descriptione":""},
{"Importance":"6.0","Date":"2015-10-02","Description":"a"}]

“重要性”是故意拼错的,以模拟丢失数据的情况。当我发布这个时,我希望委托(delegate)函数捕获无效数据并让我知道缺少必填字段。我还希望用于描述的正则表达式会导致 1 个字符的描述“a”出现错误。相反,Json.net 的 Deserializer 会跳过缺失的字段并将这些属性设置为 null,并将第二个 Description 属性设置为“a”字符串。它完全忽略了数据注释。有没有办法让 Json.NET 识别注释?

最佳答案

您可以从数据注释属性生成 JSchema:

http://www.newtonsoft.com/jsonschema/help/html/GenerateWithDataAnnotations.htm

并使用以下方法验证它们:

http://www.newtonsoft.com/json/help/html/JsonSchema.htm

Data Annotations不会直接起作用,但只要稍加努力,我相信你能得到你需要的。

关于c# - Json.NET 不识别数据注释并允许数据通过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32466981/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com