C#序列化:将包含Action类型对象的列表保存到文件
我对序列化有问题 我的清单如下:C#序列化:将包含Action类型对象的列表保存到文件,c#,object,serialization,C#,Object,Serialization,我对序列化有问题 我的清单如下: public List<Action> functions = new List<Action>(); private async void metroButton8_Click(object sender, EventArgs e) // save wpts button { string dir = @"c:\temp"; string serializationF
public List<Action> functions = new List<Action>();
private async void metroButton8_Click(object sender, EventArgs e) // save wpts button
{
string dir = @"c:\temp";
string serializationFile = Path.Combine(dir, "wpts.bin");
//serialize
using (Stream stream = File.Open(serializationFile, FileMode.Create))
{
var bformatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
bformatter.Serialize(stream, functions);
}
}
void Waypoint1()
{
Console.WriteLine("Im first waypoint");
}
我的序列化按钮如下所示:
public List<Action> functions = new List<Action>();
private async void metroButton8_Click(object sender, EventArgs e) // save wpts button
{
string dir = @"c:\temp";
string serializationFile = Path.Combine(dir, "wpts.bin");
//serialize
using (Stream stream = File.Open(serializationFile, FileMode.Create))
{
var bformatter = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter();
bformatter.Serialize(stream, functions);
}
}
void Waypoint1()
{
Console.WriteLine("Im first waypoint");
}
当我尝试仅保存到文件时,我有一个错误:
mscorlib.dll中发生“System.Runtime.Serialization.SerializationException”类型的异常,但未在用户代码中处理
我应该在这里添加什么,只是不知道搜索了很多论坛,仍然不知道。请耐心等待c#的新手。
谢谢 并非所有对象都可以序列化。操作不可序列化 您可以找到更多信息或阅读此 在某些情况下,你可以用一种简单的方法来做。 您可以使用MyAction列表,而不是操作列表。 我的行动是:
public class MyAction
{
//there could be several fields with data for Execute method.
//Type of this fields should be serializable.
public string DataForExecute { get; set; }
public void Execute()
{
//Do all you need here...
}
}
您甚至可以从该类继承并拥有层次结构。但它使序列化/反序列化更加复杂 所以我只需要创建一个可序列化的“某物”。我可以用什么来获取我现在列表中的相同内容。(方法对象的Luist。)@Michael序列化deligate并不是一件容易的事情。LBushkin提出了一些通用方法,并描述了为什么它在generel案例中不起作用。好的,我理解,但我可以使用其他方法来获取方法对象列表而不使用委托吗?@Michael well,最简单的方法是创建一个可序列化的类MyAction,该类将具有Execute方法和它在具有公共getter和setter的属性中执行所需的所有数据,并具有此对象的列表。如果它适用于你的情况。如果您愿意,我可以编辑我的答案并添加en示例。契皮科夫:是的,请这样做。您可以展示Waypoint1操作的示例吗?它应该做什么,你为什么要序列化它?@这并不重要,但我为你编辑了我的主要内容。