【问题标题】:error in deserialization using JSON.net使用 JSON.net 反序列化时出错
【发布时间】:2017-04-08 11:39:06
【问题描述】:

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

【问题讨论】:

  • @可能是由于添加了一些引用而出现此问题。您是否添加了Newtonsoft.Json.dll引用?
  • @anisprogrammer - 嗨。是的,我正在使用 Newtonsoft.Json.dll,它已被添加到项目的参考中!
  • 你能告诉我你的代码吗
  • 您的 json 和您的对象不匹配。请发布您拥有的课程,示例 json 和反序列化代码
  • @anisprogrammer - 代码非常庞大!超过 25000 行。如果你能告诉我你需要哪一部分代码?

标签: c# json multithreading linq json.net


【解决方案1】:

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

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

对于任何尝试序列化/反序列化此类对象的人来说,我想不出任何理由,当你序列化所有类的字段时,你可能无意中这样做了,这会导致所有对象的序列化您继承自的类,其中之一是具有 system.Runtime.Remoting.Messaging.LogicalCallContext 字段的系统类。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 2018-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多