Próbuję użyć System.Dynamic.ExpandoObject
, dzięki czemu mogę dynamicznie tworzyć właściwości w czasie wykonywania. Później muszę przekazać instancję tego obiektu, a zastosowany mechanizm wymaga serializacji.Czy można szeregować ExpandoObject w .NET 4?
Oczywiście, gdy próbuję serializować mój obiekt dynamiczny, otrzymuję wyjątek:
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.
Mogę serializacji ExpandoObject? Czy istnieje inne podejście do tworzenia dynamicznego obiektu, który można serializować? Być może używając opakowania DynamicObject?
Utworzyłem przykład bardzo prosty Windows Forms powielić błąd:
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();
}
}
}
Krótki wdrażania podręcznika rutyna serializacji, jestem skłonny powiedzieć, że jeśli nie jest oznaczona jako "Serializable", nie, po prostu. –