Disons que c'est une collection de 2 documents BSONDeserialize BsonDocument imbriquées et non structurées (pilote mongodb C#)
{
"_id": "...",
"name": "Test1",
"sub": {
"street": "134 Fake Street",
"city": "NoWhere"
}
},
{
"_id": "...",
"name": "Test2",
"sub": {
"height": "10",
"width": "20",
"sub2": {
"type": "something"
}
}
}
où le premier niveau est une classe structurée, mais les sous-niveaux peuvent être complètement non structurées et peuvent avoir plus documents imbriqués plusieurs niveaux profonds. Comment désérialiser ce document dans une classe C#? Tous les échantillons que j'ai vus supposent une certaine structure dans les documents imbriqués.
La classe suivante donne une erreur:
public class Report
{
[BsonId]
public ObjectId _id { get; set; }
public string name { get; set; }
public BsonDocument sub { get; set; }
}
Type 'MongoDB.Bson.BsonString' with data contract name '...' is not expected. Consider using a DataContractResolver or add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer.
EDIT
Ce que je suis en train de faire peut-être non-sens complet. Est-ce une meilleure idée d'utiliser un seul BsonDocument et de gérer tout manuellement sans une classe structurée?
essayez d'utiliser une keyword.This dynamique façon dont vos données non structurées seront mis en correspondance avec un complément objet C# à l'exécution time.http: //msdn.microsoft.com/en-us/library/dd264736.aspx –
Je ne pense pas que la dynamique est correctement supportée par le pilote officiel pour le moment. J'ai moi-même lutté contre ce problème, mais j'en suis arrivé à la conclusion que mes documents n'étaient pas aussi ad hoc que je le pensais. Pouvez-vous décrire les variantes de schéma que vous avez? Ou est-ce simplement que vos documents sont inégaux. La différence étant que les variances de schéma signifieraient une structure totalement différente (différents types) tandis que les inégalités pourraient simplement signifier qu'il y a des documents épars. Est-il possible par exemple de décrire l'uber-document qui est un sur-ensemble de toutes les variantes? J'utilise aussi beaucoup le dictionnaire <,> pour les objs complètement variables – cirrus
Le problème est que je peux seulement définir la structure de premier niveau, mais aucun des objets imbriqués. La raison en est que chaque utilisateur peut définir sa propre structure de document et disposer d'une collection de plusieurs «documents-modèles». Les objets si fortement typés sont définitivement supprimés. Je suis nouveau à C#, mais il me semble que le dictionnaire est aussi sorti car il est toujours structuré. –