使用JSON.net进行反序列化时出错

问题描述 投票:-2回答:1

我在我的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

c# json multithreading linq json.net
1个回答
1
投票

您的问题是您正在尝试将在特定上下文中的特定计算机上创建的system.Runtime.Remoting.Messaging.LogicalCallContext反序列化到另一个上下文中的另一台计算机。

反序列化失败导致对象属性的不同结构。

对于任何试图序列化/反序列化这种对象的人来说,没有理由可以想到,当你序列化所有类的字段时,你可能会无意中这样做,这会导致你继承的所有类的序列化,其中一个是具有字段system.Runtime.Remoting.Messaging.LogicalCallContext的系统类。

为了解决您的问题,并提高您的性能,我建议使用[JsonObject(MemberSerialization.OptIn)]属性,将其添加到您未能序列化的类上 - 通过添加[JsonProperty]来控制哪些成员和DataMembers将序列化/反序列化仅归因于您真正需要的成员。

© www.soinside.com 2019 - 2024. All rights reserved.