有没有办法序列化添加到动态类型的方法,反序列化它,然后调用反序列化的方法?这是一个例子:
dynamic d = new ExpandoObject();
d.Property = "Test";
d.Method = new Action<string>(Console.WriteLine);
d.Method(d.Property); //Writes "Test"
var json = JsonConvert.SerializeObject(d);
var d2 = JsonConvert.DeserializeObject<ExpandoObject>(json, new ExpandoObjectConverter());
Console.WriteLine(d2.Property); //Writes "Test"
d2.Method(d2.Property); //throws an exception
Console.ReadLine();
抛出的异常是:
未处理的类型异常 发生了'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' System.Core.dll
其他信息:无法调用非委托类型
答案 0 :(得分:0)
您使用JSON作为序列化格式,这会丢弃任何方法,因为JSON只关心对象。
请参阅http://json.org/中的定义.JSON只知道object {},array []和value( key : val )。
如果你希望你的C#对象在某种程度上完整,就像在序列化之前在内存中一样,我会改用二进制格式化器。