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操作的示例吗?它应该做什么,你为什么要序列化它?@这并不重要,但我为你编辑了我的主要内容。