使用JSON.net进行反序列化时出错
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用JSON.net进行反序列化时出错相关的知识,希望对你有一定的参考价值。
我在我的c#应用程序中使用JSON.net序列化/反序列化。当它突然在ErrorOnDeserialization
中强制出现以下错误时工作正常;我该怎么做才能解决它?
错误如下:
CurrentObject:{System.Threading.Thread}
ErrorContext:
{
Error:{"Unable to cast object of type 'Newtonsoft.Json.Linq.JObject' to type 'System.Runtime.Remoting.Messaging.LogicalCallContext'."}
Member:"ExecutionContext"
Path:"Dispatcher.Thread.ExecutionContext"
}
我已经在下面的链接上传了一个示例项目。请运行它并打开它中的.flow文件,直到它进入显示错误的断点。 enter link description here
您的问题是您正在尝试将在特定上下文中的特定计算机上创建的system.Runtime.Remoting.Messaging.LogicalCallContext反序列化到另一个上下文中的另一台计算机。
反序列化失败导致对象属性的不同结构。
对于任何试图序列化/反序列化这种对象的人来说,没有理由可以想到,当你序列化所有类的字段时,你可能会无意中这样做,这会导致你继承的所有类的序列化,其中一个是具有字段system.Runtime.Remoting.Messaging.LogicalCallContext的系统类。
为了解决您的问题,并提高您的性能,我建议使用[JsonObject(MemberSerialization.OptIn)]属性,将其添加到您未能序列化的类上 - 通过添加[JsonProperty]来控制哪些成员和DataMembers将序列化/反序列化仅归因于您真正需要的成员。
以上是关于使用JSON.net进行反序列化时出错的主要内容,如果未能解决你的问题,请参考以下文章
使用 DataContractSerializer 发送反序列化的 Json.net 对象时出错