正如例外所述,MethodInfo不再可序列化,因此您无法使用默认的BinarySerializer序列化委托,Actions ,Func ....。
有关更多详细信息和原因,请参见此问题:https://github.com/dotnet/corefx/issues/19119
也许这可以作为一种解决方法,它在序列化后使用反射来绑定功能:
class Program
{
[Serializable]
public class Test
{
[JsonIgnore]
public Action<string> AFunc { get; set; }
public string[] AFuncIdentifier { get; set; }
}
public static class Methods
{
public static void Log(string additional)
{
Console.WriteLine(additional);
}
}
static void Main(string[] args)
{
var myTest = new Test();
myTest.AFunc = Methods.Log;
myTest.AFuncIdentifier = new string[] { myTest.AFunc.Method.DeclaringType.FullName,myTest.AFunc.Method.Name };
var raw = JsonConvert.SerializeObject(myTest);
var test = JsonConvert.DeserializeObject<Test>(raw);
RestoreFunc(test);
test.AFunc("a");
}
private static void RestoreFunc(Test test)
{
var fIdentifier = test.AFuncIdentifier;
var t = Assembly.GetExecutingAssembly().GetType(fIdentifier[0]);
var m = t.GetMethod(fIdentifier[1]);
test.AFunc = (Action<string>)m.CreateDelegate(typeof(Action<string>));
}
}
本文链接:https://www.f2er.com/3014790.html