Как сериализовать коллекцию ключ: строка, значение: объект, используя soapformatter - PullRequest
0 голосов
/ 18 мая 2011

Мне нужен набор ключей и значений (например, словарь), но он должен быть сериализуемым с использованием Soapformatter.

Почему мылоформат?
Я не знаю тип, который должен быть сериализован, я знаю только интерфейс, который реализует этот тип.

Кто-нибудь знает, как взломать этот орех?

1 Ответ

1 голос
/ 18 мая 2011

Видимо, все, что нужно, это наследовать от 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);
    }
}

Надеюсь, это когда-нибудь может помочь кому-то еще: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...