在 NewtonSoft Json 中将通用布尔值反序列化为对象时出错?

Error in deserializing generic boolean to object in NewtonSoft Json?

我知道这种问题已经被问过很多次了,但我真的想不通。我从控制器发送这个对象:

OperationResult<bool>()
{
   IsSuccess = true,
   Result = default,
   Error = null
};

我在前端收到这个 json 字符串:

'{"result":false,"error":null,"isSuccess":true}'

然后我尝试像这样反序列化它:

var result = JsonConvert.DeserializeObject<OperationResult<R>>(jsonstring);

这是我尝试将 json 反序列化为的对象类型:

    public class OperationResult<R>
    {
        public OperationResult()
        {
        }

        public R Result { get; set; }
        public string Error { get; set; }
        public bool IsSuccess { get; set; } 
    }

在反序列化时我得到这个异常:

Error converting value False to type OperationResult`1[System.Boolean]

这是内部异常:

Could not cast or convert from System.Boolean to OperationResult`1[System.Boolean].

奇怪的是,只有当 R 是布尔类型时,我才会收到此错误。

老实说,除了将类型从布尔值更改为另一种类型以查看序列化是否有效之外,我没有尝试过任何其他方法。我不知道还能做什么。

我在 VS 中测试了你的代码,一切正常,没问题

static void Main()
{
    var json="{\"result\":false,\"error\":null,\"isSucces\":true}";
    var result = JsonConvert.DeserializeObject<OperationResult<bool>>(json);
    json = JsonConvert.SerializeObject(result, Newtonsoft.Json.Formatting.Indented);
}

结果

{
  "Result": false,
  "Error": null,
  "IsSuccess": false
}

class

public class OperationResult<T>
{
    public T Result { get; set; }
    public string Error { get; set; }
    public bool IsSuccess { get; set; }
}