Comment sérialiser une collection de clé: chaîne, valeur: objet utilisant SOAPFormatter

StackOverflow https://stackoverflow.com/questions/6042537

  •  15-11-2019
  •  | 
  •  

Question

J'ai besoin d'une collection de clés et de valeurs (comme un dictionnaire) mais elle doit être sérialisable en utilisant le soapformatter.

Pourquoi le SOAPFormatter?
Je ne connais pas le type qui doit être sérialisé, je ne connais que l'interface que le type implémente.

Quelqu'un a-t-il la moindre indication de comment casser cet écrou?

Était-ce utile?

La solution

Apparemment, tout ce qu'il faut est de hériter de Hashtable et d'ajouter les constructeurs suivants:

[Serializable]
public class StateContainer : Hashtable, IStateContainer
{
    public StateContainer() : base() { }
    public StateContainer(SerializationInfo info, StreamingContext context) : base(info, context) { }
}

M'a pris une demi-journée pour comprendre ça ...

Vous pouvez ensuite sérialiser cette classe comme ceci:

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);
}

Et désérialiser comme ceci:

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);
    }
}

J'espère que cela peut aider quelqu'un d'autre là-bas un jour :-)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top