gpt4 book ai didi

c# - 序列化具有非原始数据成员的对象

转载 作者:行者123 更新时间:2023-11-30 22:06:30 25 4
gpt4 key购买 nike

我有一个具有以下结构的类

    public class MyClass:
{
public GMapMarker marker; // from GMap.NET library
public TwitterStatus tweet; // from TweetSharp library
public List<MYTriple> triples = new List<MYTriple>();
public List<MYGraph> Graph = new List<MYGraph>();
}

我有 list

List<MyClass> mylist;

我只是想将列表序列化/保存到一个文件中,并在我的程序下次启动时再次加载它,

列表可能包含数百个结果,我只关心性能。

我试过 Jason,反序列化列表时出现异常

InvalidOperationException Instances of abstract classes cannot be created

最佳答案

不同的序列化选项具有不同的特性和权衡。没有一种选择可以满足您的所有需求,因为:

  • 并不是所有的东西都是[Serializable](对于BinaryFormatter)——而且BinaryFormatter实际上总是一个糟糕的选择
  • 并不是所有的东西都有适合XmlSerializer的公共(public)无参数构造函数
  • 等等,对于你能说出的每一个序列化器(相信我,我能说出很多):它们都有不同的特性和它们能/不能做的事情——通常有很好的协议(protocol)原因,而不仅仅是冷漠/无能

IMO,这里的问题是您正在尝试序列化实现细节而不是序列化数据。如果您创建一个仅表示数据(但不依赖于第 3 方类型)的自定义 DTO 模型,则可以创建一个合理的序列化模型,该模型可以根据您的选择非常有效地工作序列化程序,当您升级库引用或完全切换到不同的库时,它不会严重中断。

一些序列化器(protobuf-net 确实如此)允许您通过序列化代理类型的方式混合和匹配,这意味着您可以告诉它在遇到某些类型时静默地替换它们(特别是,如果您的模型的 80%是序列化友好的,这让您可以将另外 20% 作为引擎的一部分换掉)——但如果不了解这里的具体细节,很难说这是否有帮助。

关于c# - 序列化具有非原始数据成员的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23639047/

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