Вы можете создать свою собственную сериализуемую версию класса ExpandoObject , унаследовав от DynamicObject и реализовав ISerializable .
ExpandoObject - это в основном словарь, в котором хранятся имена динамически присоединенных свойств вместе со значениями:
[Serializable]
public class SerializableExpandoObject : DynamicObject, ISerializable
{
private Dictionary<string, object> properties = new Dictionary<string, object>()
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
return properties.TryGetValue(binder.Name, out result);
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
properties.Add(binder.Name, value);
return true;
}
....
}
Здесь вы можете реализовать любой поддерживаемый формат сериализации, включая IXmlSerializable .