Domanda

Qual è il modo migliore per serializzare un oggetto HashTable (o di un dato migliore navigato attraverso una stringa indicizzatore) con SOAP/XML?

Diciamo che ho un Foo che ha una proprietà Bar[] Bars.Un Bar oggetto dispone di una chiave e un valore.Per impostazione predefinita, questo serializza il seguente codice XML:

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

Per JSON, questo serializza a:

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

Quello che mi piacerebbe avere è questo serializzare, per riflettere meglio il rapporto sottostante.E. g.,

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

Mi rendo conto che ci sono alcuni problemi con la serializzazione di SAPONE in questo modo, ma qual è il migliore approccio per fornire uno schema che rispecchia meglio questo?

Ho cercato di creare un BarsCollection oggetto e la definizione di serializzazione personalizzata, ma non sembra effettivamente richiamare la serializzazione su tale oggetto.E. g.

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

Qualche suggerimento?Qual è il miglior pratica qui?

È stato utile?

Soluzione

Io davvero non credo che ciò che si desidera che riflette la struttura migliore.Per definire uno schema (si pensi XSD) per questo è necessario conoscere tutte le potenzialità chiavi in anticipo in quanto si indica che si desidera che ogni uno per tipo personalizzato.Concettualmente Bar sarebbe un array di oggetti in possesso di oggetti di tipo Key0, Key1, con ogni KeyN classe che contiene un valore di proprietà.Credo che il primo serializzazione in realtà è il miglior riflesso della struttura sottostante.Il motivo per cui si "lavora" di più, come in JSON è che si perde la tipizzazione -- tutto è solo un oggetto.Se non si preoccupano i tipi perchè non usare JSON?

Altri suggerimenti

ISerializable non è utilizzato per la serializzazione xml;utilizzato per la serializzazione binaria.Sarebbe meglio attuazione IXmlSerializable.

Ma penso che il KeyedCollection serializza più come stai pensando.Tranne che non si otterrà mai /> /> dal momento che gli elementi sulla mappa per classi.

Si potrebbe passare il hashtable in una Estensione SOAP.In questo modo, è possibile registrarlo in qualsiasi modo si desidera.Anche se c'è il codice personalizzato per questo che deve essere il client e il server.

Penso che ti manca una parte fondamentale del protocollo SOAP.

Una delle cose che mi piace di più il protocollo SOAP è che è possibile definire oggetti arbitrari (con metodi) nel file WSDL e passare questi oggetti in giro da una parte all'altra utilizzando il protocollo SOAP.Non devi serializzare i dati su di un lato e poi unserialize su l'altra estremità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top