使用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 对象时出错

Json.NET 可以对流进行序列化/反序列化吗?

使用空白数组反序列化 JSON 对象

Json.NET在返回json序列化字符串时添加反斜杠

使用来自 URL 的 JSON.NET 反序列化 JSON 数组

使用 JSON.NET 反序列化 DateTime 时如何保留时区? [复制]