2014-03-06 2 views
0

Есть ли способ сериализации метода, добавленного в динамический тип, десериализовать его, затем вызвать десериализованный метод? Ниже приведен пример:Последовательный динамический метод и вызов после десериализации

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

Конечно, всегда есть способ сериализовать такие вещи, что «десериализация» имеет те же результаты. Из-из-коробки? Нет, вам нужно будет написать что-нибудь, чтобы воссоздать делегата Action , потому что он указывает на метод и т. Д. –

ответ

0

Вы используете JSON как свой s erialization format, который выкинет любые методы, потому что JSON заботится только об объектах.

См определение в http://json.org/ JSON только знает об объекте {}, массив [] и значение (ключ: VAL).

Если вы хотите, чтобы ваш объект C# был каким-то образом неповрежденным, как это было в памяти перед сериализацией, вместо этого я использовал бы бинарный форматтер.

Смежные вопросы