我有一个具有以下结构的课程
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<MyClass> mylist;
我只是想将列表序列化/保存到文件中,并在下一个程序启动时再次加载它,
列表可能包含数百个结果,我只关心性能。
我试过Jason,在反序列化列表时遇到了异常
InvalidOperationException无法创建抽象类的实例
答案 0 :(得分:3)
不同的序列化选项具有不同的功能和权衡。没有一个选项能够满足您的需求,因为:
[Serializable]
(对于BinaryFormatter
) - 加上BinaryFormatter
实际上总是一个糟糕的选择XmlSerializer
IMO,这里的问题是您正在尝试序列化实现细节而不是序列化数据。如果您创建一个仅代表数据的自定义DTO模型(但它不依赖于第三方类型),那么就可以创建一个理智的序列化模型,该模型可以非常有效地使用您选择的序列化程序,当您升级库引用或完全切换到其他库时,它不会破坏。
某些序列化程序(当然,protobuf-net)允许您通过序列化代理类型进行混合和匹配,这意味着您可以告诉它在遇到某些类型时默默地替换某些类型(特别是,如果模型的80%)是序列化友好的,这可以让你换掉其他20%作为引擎的一部分) - 但是如果不知道更多关于这些细节的信息,很难说这是否会有所帮助。
答案 1 :(得分:0)
您可以使用下面的代码使用最可靠的Json.net
string json = JsonConvert.SerializeObject(mylist, Formatting.Indented);
File.WriteAllText(@"c:\mylist.json", json);
答案 2 :(得分:0)
使用json.net;
File.WriteAllText(@".\temp.txt", JsonConvert.SerializeObject(myInstance));
MyClass instanceOnLoad = JsonConvert.DeserializeObject<MyClass>(File.ReadAllText(@".\temp.txt"));
比这更容易!