Estoy tratando de usar un System.Dynamic.ExpandoObject
para poder crear dinámicamente propiedades en tiempo de ejecución. Más tarde, necesito pasar una instancia de este objeto y el mecanismo utilizado requiere serialización.¿Puedo serializar un ExpandoObject en .NET 4?
Por supuesto, cuando intento para serializar mi objeto dinámico, consigo la excepción:
System.Runtime.Serialization.SerializationException was unhandled.
Type 'System.Dynamic.ExpandoObject' in Assembly 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable.
¿Puedo serializar el ExpandoObject? ¿Hay algún otro enfoque para crear un objeto dinámico que sea serializable? Tal vez usando un contenedor DynamicObject?
He creado un muy simple de Windows Forms ejemplo para duplicar el error:
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();
}
}
}
corto de implementar un manual de rutina de serialización, me inclino a decir que si no está marcado como 'Serializable', entonces, no, simplemente. –