Utilizzo di più classi di schemi XML in C #

1

Sto lavorando con un processo di importazione dei dati in C #, che prende un file zip pieno di file XML e salva specifici punti dati in un database. Questo si ottiene caricando i dati XML in classi compilate dallo schema. La logica di importazione recupera i dati scavando nelle giuste classi e campi.

Lo schema XML è definito da una società diversa e lo schema cambia ogni anno per anni quando viene rilasciata una versione aggiornata del software. Ciò che la mia azienda vorrebbe fare è poter importare diverse versioni dello schema in modo da poter supportare file più vecchi. C'è anche un dibattito sul fatto che questo cambiamento valga la pena.

Il mio piano per raggiungere questo obiettivo sarebbe quello di determinare quale schema utilizzare all'inizio di un'importazione e quindi utilizzare diverse classi di interfaccia per ottenere i dati dall'XML e passarli nuovamente alle classi di importazione, che quindi salverebbero il valori al database. Ci sono oltre 200 classi generate in base allo schema, ma abbiamo solo bisogno di accedere ai dati in circa la metà di essi.

Esistono altri modi per approcciare il supporto di più schemi XML che potrebbero essere più semplici?

    
posta Greg 28.08.2013 - 16:33
fonte

1 risposta

0

È possibile inserire ciascun set di classi di uno schema in un proprio assieme. Quindi, caricare l'assembly corretto in modo dinamico in fase di runtime dopo aver identificato la versione dello schema. Questa tecnica viene spesso utilizzata per creare plug-in (vedere qui per un esempio).

Per evitare di avere tutte le 200 classi che implementano un'interfaccia, il tuo codice di importazione può utilizzare la parola chiavedynamic di C # 4.0% per accedere agli oggetti dello schema, indipendentemente da quale assembly sono caricati, purché il metodo la firma non cambia tra le versioni. Vedi qui per un esempio.

Lo svantaggio è che perderai la sicurezza del tipo, dovrai decidere se è accettabile nel tuo caso.

    
risposta data 28.08.2013 - 21:26
fonte

Leggi altre domande sui tag