我有2个共享一个程序集的应用程序。 第一个序列化一个对象,然后将其发送给另一个序列化以进行进一步处理。
这是我试图反序列化数据时的另一端...
...使用“ AppDomain.CurrentDomain.GetAssemblies()”查看监视窗口中加载的程序集,我注意到有问题的程序集已加载到应用程序域中,但由于某些原因,Newtonsoft反序列化器无法选择它起来
有什么想法我应该在哪里寻找解决方案?
其他一些可能相关的信息...
需要从评论中获取更多信息...
有关该异常的实际消息是:
Error resolving type specified in JSON 'Core.Objects.Workflow.Activities.Start`1[[System.Object, mscorlib]], Core.Objects'. Path 'Activities[0].$type', line 1, position 285.
还有进一步的内部异常报告...。
Could not load file or assembly 'Core.Objects, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.
此异常发生时,我在FlowDefinition内部,调用了如下定义的GetFlow()...
public class FlowDefinition
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
[ForeignKey("App")]
public int AppId { get; set; }
[Required]
public string Name { get; set; }
public string DefinitionJson { get; set; }
public string ConfigJson { get; set; }
[DontPrivilege]
public Flow GetFlow() { return DefinitionJson != null ? JsonConvert.DeserializeObject<Flow>(DefinitionJson, ObjectExtensions.JSONSettings) : null; }
[DontPrivilege]
public dynamic GetConfig() { return ConfigJson != null ? JsonConvert.DeserializeObject<ExpandoObject>(ConfigJson, ObjectExtensions.JSONSettings) : null; }
public virtual App App { get; set; }
public virtual ICollection<FlowInstanceData> Instances { get; set; }
public virtual ICollection<BusinessProcessWorkflow> Processes { get; set; }
}
public class Flow
{
[Key]
[Required]
public string Name { get; set; }
public string RequiredRoles { get; set; }
public Activity[] Activities { get; set; }
public Link[] Links { get; set; }
}
...活动是我所有活动类型的抽象基本类型,不能直接反序列化,而必须看到派生类型。
这是系统失败的示例JSON字符串...
{
"Name":"Test",
"RequiredRoles":"",
"Links":[
{
"Source":"Start",
"Destination":"53c102ac10ce109d7d62c489beb242ccb10a62d83",
"Expression":"{destination}.Item = {source}.Data.Message"
}
],
"Activities":[
{
"$type":"Core.Objects.Workflow.Activities.Start`1[[System.Object, mscorlib]], Core.Objects",
"Ref":"Start",
"AuthToken":null,
"Data":null,
"State":null,
"Previous":null,
"Next":null,
"AssignValues":null
},
{
"$type":"Core.Objects.Workflow.Activities.DebugActivity, Core.Objets, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null",
"Ref":"53c102ac10ce109d7d62c489beb242ccb10a62d83",
"Item":null,
"State":null,
"Previous":null,
"Next":null,
"AssignValues":null,
"Data":null
}
]
}
...上面显示的所有类型都在同一程序集中定义,并编译为.Net Core 2.2 Azure函数应用程序正在使用的.Net Standard 2.0程序集。
答案 0 :(得分:1)
请检查是否使用的对象具有构造函数/依赖关系,其中包含由于缺少依赖关系而无法反序列化的对象。
还要检查类型是否包含Core。 Objets ,而不是Core。 Objects 。