2011-01-02 1 views
0

J'ai une table dans ma base de données SQL Server qui contient des informations d'audit pour certaines actions qu'un utilisateur effectue dans mon système. Des choses comme qui a effectué l'action, quand elle a été réalisée, et quelle action sont toutes les informations qui peuvent facilement couvrir plusieurs actions. Mais en fonction de l'action effectuée, il peut y avoir d'autres informations que je veux capturer, qui sont spécifiques à l'action. Pour gérer cela, j'ai choisi d'ajouter une colonne "XML Metadata" à la table qui contient le XML sérialisé des différents objets de métadonnées que j'ai créés. J'ai créé un objet de métadonnées pour chacune des actions pour lesquelles je souhaite effectuer un suivi supplémentaire. Chaque objet est donc responsable du suivi des informations supplémentaires spécifiques (métadonnées) pour son action. Les objets sont sérialisés et écrits dans ma nouvelle colonne.ASP.NET: meilleure façon de déterminer le type d'objet sérialisé au format XML

J'ai des objets SystemAction que j'utilise pour stocker des informations de cette table, et j'ai ajouté un champ de chaîne qui contient la chaîne XML de la base de données. Le problème est que, lorsque je lis ce XML à partir des objets SystemAction, je suis en train de trouver un moyen de le traduire génériquement dans l'objet de métadonnées correct. Chaque objet de métadonnées va avoir des champs différents, et chaque objet a sa propre méthode statique qui prend une chaîne XML et tente de retourner le type d'objet de métadonnées. Donc, je pourrais dire:

SomeActionMetadata mdObj = SomeActionMetadata.BuildFromXML(xmlStringFromDB);

Mais je ne sais vraiment pas d'une façon de dire « Voici quelques XML qui pourrait se traduire par un certain nombre de différents objets figure dehors et me donner l'objet de retour. " Compte tenu de mon implémentation actuelle, je peux toujours attribuer un ID unique à chaque objet de métadonnées stocké en tant que champ dans chaque objet, puis utiliser une instruction case pour activer cet ID et utiliser la méthode de génération statique de la classe appropriée pour construire le bon objet. Mais j'espérais quelque chose d'un peu plus automatique que ça. Que se passe-t-il si j'ai une liste d'objets SystemAction et que je veux simplement les parcourir pour générer le type d'objet de métadonnées correct? J'espérais que quelqu'un pourrait avoir croisé quelque chose de semblable à ceci avant, ou pourrait me diriger vers un article ou un article qui pourrait m'aider. Merci beaucoup.

+0

Pourquoi n'utilisez-vous pas simplement la sérialisation xml dans System.Xml.Serialization? C'est une sérialisation xml bidirectionnelle prête à l'emploi. –

+0

Copie possible de http://stackoverflow.com/questions/775647/how-do-i-deserialize-xml-without-knowing-the-type-beforehand Vous pouvez essayer ce qui est mentionné ici et nous dire si cela résout votre problème –

+0

@Subhash, qui a pointé dans une direction suffisante pour résoudre mon problème. Merci! –

Répondre

1

Comme indiqué par Subhash Dike dans les commentaires ci-dessous, il y a une question similaire SO here qui a été capable de me diriger dans la bonne direction.

Questions connexes