序列化动态方法并在反序列化后调用

时间:2014-03-06 20:53:37

标签: c#-4.0 serialization dynamic deserialization

有没有办法序列化添加到动态类型的方法,反序列化它,然后调用反序列化的方法?这是一个例子:

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

     

其他信息:无法调用非委托类型

1 个答案:

答案 0 :(得分:0)

您使用JSON作为序列化格式,这会丢弃任何方法,因为JSON只关心对象。

请参阅http://json.org/中的定义.JSON只知道object {},array []和value( key val )。

如果你希望你的C#对象在某种程度上完整,就像在序列化之前在内存中一样,我会改用二进制格式化器。