2017-10-19 92 views
-1

我创建C#应用程序,它会从Web服务的响应,并将它作为DTO对象像Newtonsoft.Json.JsonSerializationException在反序列化JSON响应C#

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)它工作正常。但我无法返回对象

+2

看起来它的'il_response.c_forms [0] .fields [0] .required'的值有问题,因为它的值是“on”,比如“true”。如果你想用boolean标志打开和关闭,你需要有一个JsonConverter类的自定义实现。看到这里,https://stackoverflow.com/questions/14524669/how-to-get-newtonsoft-to-deserialize-yes-and-no-to-boolean – Bearcat9425

+0

可能相关:https://stackoverflow.com/questions/ 6284936 /为什么是一个复选框发布一个值的 –

+0

如果添加更多的信息,它会更容易帮助。似乎发送你的'变种响应=新列表();'回服务器包含包含值'on'而不是TRUE;或'FALSE'因此消息'”的属性打开“键入'System.Boolean''。 'RootObject'的属性和类型是什么?如果你看看回应并比较属性和值,你会发现更多。 – surfmuggle

回答

0

的列表中的错误表示,它试图转换“的”一个布尔值,它不能做的。我只能猜测它是一个“开”或“关”的字段,因此是布尔字段。

如果你有数据的控制,你可能想将其更改为真假。除此之外,你必须编写一个JASON转换器,但是当你使用转换器进行反序列化时,它会将所有开启和关闭视为布尔类型。这可能是一个问题,取决于你在做什么。

我有一个类似的问题here你可以看看。最后,在最后一个答案中,我将一些运行代码与一个如何实现的例子进行了粘贴。您可以剪切并粘贴到控制台程序中并进行测试。

我希望有帮助。