Sérialisation XML des résultats dapper

c# dapper generics serialization xml

Question

Je stocke les résultats SQL dans une liste dynamique, de type DapperRow sous-jacent. J'essaie de sérialiser / désérialiser cette liste dont XMLserializer se plaint:

There was an error generating the XML document. ---> System.InvalidOperationException: To be XML serializable, types which inherit from IEnumerable must have an implementation of Add(System.Object) at all levels of their inheritance hierarchy. Dapper.SqlMapper+DapperRow does not implement Add(System.Object).

Y a-t-il un moyen de contourner ce problème (en plus de la diffusion évidente des résultats dans mon propre objet concret), ou est-il possible de faire en sorte que les objets DapperRow soient conformes aux contraintes System.Xml.XMLserializer?

Il indique que mon tableau de résultats est System.Collections.Generic.List<dynamic> {System.Collections.Generic.List<object>} Ouverture du tableau Il est dit que chaque objet est de type object {Dapper.SqlMapper.DapperRow}

Je pense que parce que DapperRows sont maintenant essentiellement IDictionary<string, object> ce XML a des problèmes (je ne peux rien utiliser d'autre que System.Xml.XmlSerializer donc ne suggère pas d'alternative).

Je veux juste pouvoir tourner une List<dynamic> que je reçois de Dapper et sérialiser et désérialiser correctement avec System.Xml.XmlSerializer

Réponse populaire

J'ai pu obtenir quelque chose au moins sérialisable en utilisant un dictionnaire sérialisable: http://weblogs.asp.net/pwelter34/444961

            var results = conn.Query<dynamic>(sql, param);
            var resultSet = new List<SerializableDictionary<string, object>>();
            foreach (IDictionary<string, object> row in results)
            {
                var dict = new SerializableDictionary<string, object>();
                foreach (var pair in row)
                {
                    dict.Add(pair.Key, pair.Value);
                }
                resultSet.Add(dict);
            }

C'est moche, alors j'espère que des solutions plus élégantes se présenteront




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi