gpt4 book ai didi

c# - .NET Framework 和 Core BinaryFormatter 的兼容性

转载 作者:太空宇宙 更新时间:2023-11-03 14:55:55 24 4
gpt4 key购买 nike

我想知道是否使用 .NET Framework 序列化了一个对象 BinaryFormatter可以使用 .NET Core 反序列化 BinaryFormatter反之亦然。

这些格式在多大程度上兼容?

上下文:我正在将遗留应用程序的一部分移植到 .NET Core,此代码使用 BinaryFormatter 执行不再受支持的 .NET Remoting。所以我想知道如何替换对象的序列化。第一次试验表明,有时可以使用 BinaryFormatter (这很好,因为这样我的代码更改就更少了),在其他情况下,反序列化失败并出现看似随机的错误消息,例如“无根对象”或“type needs to implement IConvertible”这似乎表明格式不兼容。

在这个 SO 问题中,我试图了解这些格式在多大程度上兼容,看看是否有简单的解决方法,而不是完全切换到另一种序列化技术/框架。

最佳答案

在我的例子中,.net 核心不识别 .net 框架中的列表(我的意思是列表将为空),反之亦然。我正在考虑使用 Newtonsoft.Json。

通常,当您创建 ASP.NET MVC 项目时,Newtonsoft.Json 会自动安装。

我在 .net 核心中序列化以下内容:

SubtitlesAnalysis ana = GetAnalysis();
string output = Newtonsoft.Json.JsonConvert.SerializeObject(input);
File.WriteAllText(@"D:\1.json", output);

我在 .net 框架中反序列化它:

var input = File.ReadAllText("D:\1.json");       
var ana = Newtonsoft.Json.JsonConvert.DeserializeObject<SubtitlesAnalysis>(input);

类字幕分析:

    [Serializable()]
public class SubtitlesAnalysis
{
public int WordCountOfBasic
{
get
{
return WordCountsByDifficulty[1];
}
}

public int WordCountOfCet4
{
get
{
return WordCountsByDifficulty[2];
}
}

public int WordCountOfCet6
{
get
{
return WordCountsByDifficulty[3];
}
}

public int WordCountOfIeltsOrTofel
{
get
{
return WordCountsByDifficulty[4];
}
}

public int WordCountOfGre
{
get
{
return WordCountsByDifficulty[5];
}
}

public int WordCountOfGrePlus
{
get
{
return WordCountsByDifficulty[6];
}
}

public int WordCount
{
get
{
return WordCountsByDifficulty[1] + WordCountsByDifficulty[2] + WordCountsByDifficulty[3] + WordCountsByDifficulty[4] + WordCountsByDifficulty[5] + WordCountsByDifficulty[6];
}
}

private int[] _WordCountsByDifficulty = new int[8];
public int[] WordCountsByDifficulty
{
get
{
return _WordCountsByDifficulty;
}
}

public int IdiomCount { get; set; }
public int Speed { get; set; }
public TimeSpan Length { get; set; }
public TimeSpan DialogueTime { get; set; }
public List<WordIdWithContext> WordAndContext { get; set; } = new List<WordIdWithContext>();
public List<WordIdWithContext> IdiomAndContext { get; set; } = new List<WordIdWithContext>();
public List<WordWithContext> UnrecognisedWordsWithContext { get; set; } = new List<WordWithContext>();

public SubtitlesAnalysis()
{
}
}

关于c# - .NET Framework 和 Core BinaryFormatter 的兼容性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49152010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com