Frage

Was ist der beste Weg, um eine HashTable (oder ein Daten besten navigiert durch einen String Indexer) mit SOAP / XML?

serialisiert

Lassen Sie uns sagen, dass ich ein Foo haben, die eine Eigenschaft Bar[] Bars hat. Ein Bar Objekt hat einen Schlüssel und einen Wert. Standardmäßig ist diese serialisiert an folgenden XML:

<Foo>
  <Bars>
    <Bar key="key0" value="value0"/>
    ...
  </Bars>
</Foo>

Für JSON, das serialisiert zu:

{"Foo":["Bars":[{"Key":"key0","Value":"key1} ... ]}]}

Was ich wirklich haben möchte, ist dies serialize um besser auf die zugrunde liegende Beziehung zu reflektieren. Zum Beispiel,

<Foo>  
  <Bars>  
    <Key0 value="value0"/>
    <Key1 value="value1"/>
    ...
  </Bars>
</Foo>

Ich weiß, es gibt einige Herausforderungen auf diese Weise zu SOAP Serialisierung, aber was ist der beste Ansatz, ein Schema zu bieten, die dies besser widerspiegelt?

Ich habe ein BarsCollection Objekt versucht, das Erstellen und Definieren benutzerdefinierte Serialisierung auf das, aber es scheint nicht wirklich um die Serialisierung für das Objekt aufrufen. Z.

void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context) {  
  foreach (Bar bar in Bars){           
    info.AddValue(bar.Key. bar);
  }
}  

Irgendwelche Vorschläge? Was ist die beste Praxis hier?

War es hilfreich?

Lösung

Ich glaube nicht wirklich, dass, was Sie wollen die Struktur besser widerspiegelt. Um ein Schema zu definieren (man denke XSD) für diese würden Sie alle möglichen Schlüssel im Voraus wissen müssen, da Sie zeigen, dass Sie jeder wollen einen separaten benutzerdefinierten Typ sein. Konzeptionell Bars würde ein Array von Objekten Halte Objekte vom Typ Key0, Key1, die mit jedem der KeyN Klasse sein Wert Eigenschaft enthält. Ich glaube, dass die erste Serialisierung eigentlich die beste Reflexion der zugrunde liegenden Struktur ist. Der Grund, warum es „funktioniert“ eher wie Sie in JSON wollen, ist, dass Sie die Eingabe verlieren - alles ist nur ein Objekt. Wenn Sie nicht über die Typen egal warum nicht nur JSON verwenden?

Andere Tipps

ISerializable ist nicht für die XML-Serialisierung verwendet; sein für binäre Serialisierung verwendet. Sie wäre besser Umsetzung IXmlSerializable.

Aber ich denke, dass die KeyedCollection serialisiert mehr wie du denkst. Außer Sie nie bekommen da Karte die Elemente Klassen.

Sie könnten die Hash-Tabelle in einer SOAP-Erweiterung übergeben. Auf diese Weise können Sie es serialisiert Je nachdem, wie Sie möchten. Obwohl es benutzerdefinierter Code ist dafür, dass auf dem Client und Server sein muss.

Ich glaube, Sie einen grundlegenden Schlüssel des SOAP-Protokolls fehlen.

Eines der Dinge, die ich wirklich wie über das SOAP-Protokoll ist, dass Sie beliebige Objekte definieren können (zusammen mit Methoden) in Ihrer WSDL-Datei und diese Objekte von einem Ende zum anderen zu gelangen um das SOAP-Protokoll. Sie müssen die Daten nicht an einem Ende serialisiert und dann am anderen Ende unserialize.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top