ASP.NET CORE和NEWTONSOFT JSON.NET:如何强制在无效字段上失败?

发布于 2025-02-04 15:40:30 字数 211 浏览 1 评论 0原文

我们有一个.NET Core 3.1 Web应用程序,并使用newtonsoft JSON.NET序列化器注册了用于序列化/进行序列化的序列化。但是现在我们有愚蠢的客户向我们发送了无效的JSON,其中包含我们在模型中没有的字段。 JSON忽略它们是正常的,但是当Deserialializer发现无效字段时,我需要找到创建模型状态错误的方法。

我们对可选字段有问题,因此默认验证在这里无济于事。

We have a .NET Core 3.1 web app and use Newtonsoft JSON.NET serializer there registered for serializing/deserializing. But now we got stupid client who send us invalid JSON which contain fields which we don't have in our models. It's normal for JSON to ignore them, but I need to find way to create model state errors when deserializer finds invalid fields.

We have problem with optional fields so default validation won't help here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

幽蝶幻影 2025-02-11 15:40:30

基于此 doc doc
尝试类似此

Class c = JsonConvert.DeserializeObject<List<Class>>("your string",
    new JsonSerializerSettings
    {
        Error = delegate(object sender, ErrorEventArgs args)
        {
            errors.Add(args.ErrorContext.Error.Message);
            args.ErrorContext.Handled = true;
        },
        Converters = { new IsoDateTimeConverter() }
    });

错误处理程序的内容:args.errcontext.handled = {true/false};

based on this doc
try something like this

Class c = JsonConvert.DeserializeObject<List<Class>>("your string",
    new JsonSerializerSettings
    {
        Error = delegate(object sender, ErrorEventArgs args)
        {
            errors.Add(args.ErrorContext.Error.Message);
            args.ErrorContext.Handled = true;
        },
        Converters = { new IsoDateTimeConverter() }
    });

error handler: args.ErrorContext.Handled = {true/false};

遇见了你 2025-02-11 15:40:30

找到的解决方案

SerializerSettings.MissingMemberHandling = MissingMemberHandling.Error;

当我的模型没有JSON的字段时, 将引发错误。命名不好,我认为这会反之亦然。

found solution

SerializerSettings.MissingMemberHandling = MissingMemberHandling.Error;

will throw error when my model doens't have fields from json. Bad naming I was thinking that it'll work vice versa.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文