JSON值未转换为cURL中的System.Boolean

问题描述

我创建了布尔型转换器,期望它会在属性IsComplete上自动使用,但是在cURL中出现错误。我在做什么错了?

错误

$ curl -k -X PUT -H "Content-Type: application/json" -d "{\"name\": \"momo\",\"isComplete\":\"true\"}" https://localhost:44358/api/TodoItems/PutItem?id=2
{"type":"https://tools.ietf.org/html/rfc7231#section-6.5.1","title":"One or more validation errors occurred.","status":400,"traceId":"|f2fadf22-471bc26be11d1bad.","errors":{"$.isComplete":["The JSON value Could not be converted to System.Boolean. Path: $.isComplete | LineNumber: 0 | BytePositionInLine: 36."]}}

转换器

namespace System.Text.Json.Serialization
{
    public class BooleanConverter : JsonConverter<bool>
    {

        public override bool Read(
            ref Utf8JsonReader reader,Type typetoConvert,JsonSerializerOptions options) =>
            bool.Parse(reader.GetString());

        public override void Write(
            Utf8JsonWriter writer,bool b,JsonSerializerOptions options) =>
            writer.WriteStringValue(b.ToString());
    }
}

属性

namespace TodoApi.Models
{
    public class TodoItem
    {
        public long Id { get; set; }
        public string Name { get; set; }
        public bool IsComplete { get; set; }
    }
}

解决方法

我创建了布尔型转换器,希望它可以在属性IsComplete上自动使用

您可以尝试在IsComplete类的TodoItem属性上注册自定义转换器。

[JsonConverter(typeof(BooleanConverter))]
public bool IsComplete { get; set; }

有关“注册自定义转换器”的更多信息,请检查:

https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-converters-how-to#register-a-custom-converter

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...