Implementare per tutte le classi BsonIgnoreExtraElements

Sto usando mongDb con MongoDrive, mi chiedo come posso implementare in tutte le mie classi i [BsonIgnoreExtraElements] .

So che c’è un modo attraverso la ConventionProfile , ma non so come implementarlo.

Utilizzare il metodo SetIgnoreExtraElementsConvention (dalla sezione Convenzioni dell’esercitazione di serializzazione driver C #):

 var myConventions = new ConventionProfile(); myConventions.SetIgnoreExtraElementsConvention(new AlwaysIgnoreExtraElementsConvention())); BsonClassMap.RegisterConventions(myConventions, (type) => true); 

Il parametro (type) => true è un predicato dipendente dal tipo di class, che determina se applicare la convenzione. Quindi, secondo le tue necessità, dovrebbe semplicemente restituire true indipendentemente; ma potresti usarlo per impostare / escludere la convenzione sui tipi specificati se lo desideri.

modificare

Per commento di Evereq, quanto sopra è obsoleto. Ora usa:

 var conventionPack = new ConventionPack { new IgnoreExtraElementsConvention(true) }; ConventionRegistry.Register("IgnoreExtraElements", conventionPack, type => true); 

Fondamentalmente,

mongoDB ti offre la possibilità di archiviare i documenti all’interno di una singola raccolta che può avere ciascuno il proprio schema. Questo è un cambiamento drastico se si dispone di uno sfondo nei database relazionali. In un database relazionale, si dispone di uno schema statico per tabella e non è ansible deviare da senza modificare la struttura della tabella. Nell’esempio seguente, ho definito una class Person e una class PersonWithBirthDate che deriva dalla class Person. Questi possono essere entrambi memorizzati nella stessa collezione in un database mongoDB. In questo caso, si supponga che i documenti siano memorizzati nella raccolta Persone.

Vedi il codice di esempio –

 public class Person { public string FirstName { get; set; } public string LastName { get; set; } } public class PersonWithBirthDate : Person { public DateTime DateOfBirth { get; set; } } 

Ora, è ansible recuperare facilmente e dei documenti e fare in modo che il driver mongoDB C # deserializzi il documento nella class PersonWithBirthDate. Tuttavia, si verificheranno problemi se si interroga la raccolta Persone e si tenta di far deserializzare il driver nella class Person. Riceverai un errore che ci sono elementi che non possono essere deserializzati. Questo facilmente risolvibile aggiungendo l’attributo [BsonIgnoreExtraElements] alla class Person. Puoi vedere la class modificata di seguito. Questo istruirà il conducente a ignorare qualsiasi elemento che non può deserializzare in una proprietà corrispondente. Con l’attributo qualsiasi documento nella collezione Persone può essere desertificato nella class Person senza errori.

 [BsonIgnoreExtraElements] public class Person { public string FirstName { get; set; } public string LastName { get; set; } } public class PersonWithBirthDate : Person { public DateTime DateOfBirth { get; set; } } 

Spero che questo chiarisca la tua comprensione.