反序列化JSON响应C#中的Newtonsoft.Json.JsonSerializationException

时间:2017-10-19 20:07:40

标签: c# json web-services json-deserialization

我正在创建C#应用程序,它从Web服务获取响应并将其作为DTO对象列表返回,如

 List<Models.iLabDTO.RootObject> response = new List<Models.iLabDTO.RootObject>();
 public async Task<IHttpActionResult> Get()
    {
      ......
      var request_returnDataObj = JsonConvert.DeserializeObject<Models.iLabDTO.RootObject>(responsefile);
      response.Add(request_returnDataObj);
      }
    return Ok(response);

但它会像

那样抛出错误
 <Error>
  <Message>An error has occurred.</Message>
 <ExceptionMessage>
 Error converting value "on" to type 'System.Boolean'. Path 
'il_response.c_forms[0].fields[0].required', line 1, position 354.
</ExceptionMessage>
 <ExceptionType>Newtonsoft.Json.JsonSerializationException</ExceptionType>

如果我只使用return OK(response)而不使用response.Add(request_returnDataObj),则可以正常使用。但是我无法返回对象列表

1 个答案:

答案 0 :(得分:0)

错误说它正在尝试将“on”转换为布尔值,而它无法做到。我只能猜测它是一个“开”或“关”的字段,因此是布尔字段。

如果您可以控制数据,则可能需要将其更改为true和false。另外,你必须编写一个JASON转换器,但是当你使用转换器进行反序列化时,它会将所有的on和off视为一个布尔类型。这可能是一个问题,取决于你在做什么。

我有一个类似的问题here你可以查看。在底部,在最后一个答案中,我粘贴了一些正在运行的代码以及如何执行它的示例。您可以在控制台程序中剪切并粘贴它并进行测试。

我希望有所帮助。