Видимо, все, что нужно, это наследовать от Hashtable и добавить следующие конструкторы:
[Serializable]
public class StateContainer : Hashtable, IStateContainer
{
public StateContainer() : base() { }
public StateContainer(SerializationInfo info, StreamingContext context) : base(info, context) { }
}
У меня ушло полдня, чтобы понять это ...
затем вы можете сериализовать этот классвот так:
XmlDocument xmlDocument = null;
using (MemoryStream memData = new MemoryStream())
{
SoapFormatter formatter = new SoapFormatter();
formatter.Serialize(memData, state);
memData.Flush();
memData.Position = 0;
xmlDocument = new XmlDocument();
xmlDocument.Load(memData);
}
И десериализовать так:
IStateContainer response = null;
using (MemoryStream memData = new MemoryStream())
{
using (StreamWriter writer = new StreamWriter(memData))
{
writer.Write(state.stateobject);
writer.Flush();
memData.Flush();
SoapFormatter formatter = new SoapFormatter();
memData.Position = 0;
response = (IStateContainer)formatter.Deserialize(memData);
}
}
Надеюсь, это когда-нибудь может помочь кому-то еще: -)