Я пытаюсь использовать System.Dynamic.ExpandoObject
, чтобы динамически создавать свойства во время выполнения. Позже мне нужно передать экземпляр этого объекта, и используемый механизм требует сериализации.
Конечно, когда я пытаюсь сериализовать свой динамический объект, я получаю исключение:
Ошибка System.Runtime.Serialization.SerializationException была необработанной.
Введите "System.Dynamic.ExpandoObject" в Assembly 'System.Core, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' не помечен как сериализуемый.
Могу ли я сериализовать ExpandoObject? Есть ли другой подход к созданию динамического объекта, который может быть сериализуемым? Возможно, используя DynamicObject оболочку?
Я создал очень простой пример Windows Forms для дублирования ошибки:
using System;
using System.Windows.Forms;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Dynamic;
namespace DynamicTest
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
dynamic dynamicContext = new ExpandoObject();
dynamicContext.Greeting = "Hello";
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("MyFile.bin", FileMode.Create,
FileAccess.Write, FileShare.None);
formatter.Serialize(stream, dynamicContext);
stream.Close();
}
}
}