La conversione da una classe a un'altra classe utilizzando serializzazione XML in C #
-
11-09-2019 - |
Domanda
Nel nostro progetto stiamo consumando webservices WCF esposti presso la sede centrale di servizi con basicHttpBinding .
In applicazione desktop client dobbiamo consumare quei webservices. Sono in grado di generare classe proxy utilizzando WSDL.exe.
Ma, ho bisogno di convertire i dati / classe fornite dal webservice nella mia classe locale, per che ora sto xmlserialzing quelle classi / oggetti fornite dal webservice e deserializzazione nelle mie classi locali sia come schema di classi corrisponde esattamente lo stesso.
C'è un modo migliore che posso seguire? o Ho bisogno di assegnare ad ogni proprietà da una classe all'altra?
grazie NRK.
Soluzione
-
dichiarare classe manualmente anziché generatrice. Questa è la soluzione più SECCO.
Altri suggerimenti
Se si ha il controllo sulle vostre classi locali (che non vengono generati codice, o li stanno generando, da soli) è possibile utilizzare attributi XML per decorare la vostra classe, in modo da poter serializzare e deserializzare a quel xml si lavora con e non c'è bisogno di avere i nomi specifici per le vostre proprietà. In aggiunta a questo, si può avere proprietà aggiuntive sulla vostra classe locale.
Se non si ha il controllo sulla definizione le vostre classi locali, quindi è necessario definire un convertitore o come elder_george menzionato, utilizzare automapper.
utilizzando un convertitore scritta manuale è IMO il modo più veloce ed è possibile definirli operatori Converter come impliciti sulla tua classe locale.
Ho fatto la cosa serializzare / deserializzare me stesso proprio come si doveva. Se i vostri classi hanno le stesse proprietà delle classi proxy si potrebbe scrivere un metodo di supporto che utilizza la riflessione per scorrere le proprietà del proxy e impostare le proprietà corrispondenti della vostra classe. Finché i nomi delle proprietà sono gli stessi, che un metodo dovrebbe funzionare su tutte le classi.
A pochi pensieri:
- condivisione di montaggio uso tramite WCF; questo consente di utilizzare lo stesso montaggio vero e proprio ad entrambe le estremità. Fintanto che questo è un complesso DTO, questo va bene (non eccessivamente portatile, però). Questo è
/reference
(anche/r
) insvcutil.exe
, oppure è possibile farlo tramite l'IDE - uso
DataContractSerializer
e di andata e ritorno (come si è già, solo che WCF mappe più da vicino aDataContractSerializer
, nonXmlSerializer
)