J'ai un modèle que j'essaie de désérialiser, le problème est que sur l'une des propriétés, c'est parfois une chaîne et parfois un document. J'ai donc décidé d'écrire un sérialiseur personnalisé qui s'appuie sur SerializerAsBase. Cependant, il semble y avoir un bug dans le cadre. Lors du remplacement de la méthode de désérialisze, je reçois toujours l'exception "LisecharbSonType ne peut être appelé que lorsque l'état est de type, pas lorsque l'état est de la valeur."
J'utilise .NET Framework 4.6.2 et toutes les versions de mes bibliothèques de Mongo sont 2.8.0 P>
Il s'agit d'une version simplifiée de ma classe et de la façon dont je la mettez en la mise en œuvre. P>
public class FormData { [BsonId] public string Id { get; set; } [BsonSerializer(typeof(MyClassSerializer))] public string Data { get; set; } }
3 Réponses :
Qu'en est-il de changer votre classe à un objet? J'ai eu un problème similaire et ça marche.
Merci pour le commentaire Rogerio, il a dépassé l'erreur, mais est automatiquement converti en une microsine
J'ai fini par écrire le sérialisateur pour le modèle lui-même au lieu de la propriété spécifique et cela fonctionne maintenant. P>
Pourriez-vous partager plus de détails sur votre solution s'il vous plaît?
Utilisez ce code
public class MyClass { public ObjectId Id { get; set; } [BsonSerializer(typeof(MyCustomStringSerializer))] public string X { get; set; } } BsonClassMap.RegisterClassMap<MyClass>(cm => { cm.AutoMap(); cm.GetMemberMap(c => c.X).SetSerializer(new MyCustomStringSerializer()); });
Bonjour et bienvenue à Stackoverflow, et merci d'avoir répondu. Bien que ce code puisse répondre à la question, pouvez-vous envisager d'ajouter des explications à ce que le problème était résolu et comment vous l'avez résolu? Cela aidera les futurs lecteurs à mieux comprendre votre réponse et en apprendre.
D'où vient l'exception, quelle ligne de code? Avez-vous regardé Stackoverflow.com/questions/42336751/Custom-Desérialization et mongodb.github.io/mongo-csharp-driver/2.2/2Reference / BSON / ...
Bonjour Jon, j'ai vu cela, j'ai effectivement adopté mon code de cet exemple. Mais même la mise en œuvre comme l'affiche, je reçois toujours l'exception. J'ai mis à jour mon message pour inclure la trace de pile afin que vous puissiez voir où dans le cadre, il appelle mon code.
Je ne vois pas myClassserializer nulle part dans cette trace de pile? Est-ce le tout?
Je crois que c'est parce que "désériializemembervalue" du cadre appelle mon code et l'exception est lancée après que ma méthode revienne déjà