从引用的.NET Framework项目对值类型进行序列化期间.NET Core项目中的TypeLoadException

时间:2019-07-04 04:11:19

标签: c# .net serialization .net-core

我具有以下项目依赖结构:

  • Object.keys(up).forEach((k) => createtextarea.setAttribute(k, up[k])) // k would be the "class","name","type") in every iteration. - .NET Core 2.2
    • _visualizerTests.dotnetcore- .NET Framework 4.7.2

在.NET Framework项目中,我定义了以下类型:

Visualizer.2019

当我尝试在.NET Core项目中序列化此类型时:

[Serializable]
public struct EndNodeData {
    public string Closure { get; set; }
    public string Name { get; set; }
    public string Type { get; set; }
    public string Value { get; set; }
}

我收到以下异常:

  

System.TypeLoadException:'无法从程序集'mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'中加载类型'System.Runtime.CompilerServices.IsReadOnlyAttribute'。 / p>

.NET Framework项目中定义的类类型可以毫无问题地进行序列化,.NET Core项目中定义的值类型也是如此。

我该如何解决?

(这是我的previous question的后续行动。)

删除var endnodeData = new EndNodeData { Closure = null, Name = null, Type = "int", Value = "5" }; var stream = File.Create(Path.GetTempFileName()); var formatter = new BinaryFormatter(); formatter.Serialize(stream, endnodeData); bin文件夹并删除解决方案的obj文件夹无济于事。

我已经提交了issue on the .NET Core repo

1 个答案:

答案 0 :(得分:0)

这大概已在.NET Core 3中修复,但在此之前,可以使用以下变通办法:

  • 避免自动实现的属性;使用完整属性或公共字段。 (为了抑制编译器警告,我为此目的使用了[SuppressMessage("", "IDE0032", Justification = "https://github.com/dotnet/core/issues/2981")]
  • 在同一程序集或某个通用程序集中定义自定义System.Runtime.CompilerServices.IsReadOnlyAttribute

Feedback on the Roslyn issue