2012-01-25 5 views
1

je la classe suivante:Le clonage d'une instance d'objet à son type de base

public class AddCouponInfoRequest : namespace.Request 
{ 

} 

J'ai une instance de AddCouponInfoRequest dans ma main et je veux obtenir une instance de namespace.Request avec les mêmes valeurs.

Cela ne fonctionne pas bien:

namespace.Request req = (namespace.Request)request; 
string xml = req.SerializeToXml(); 

La valeur du xml après sérialisation est:

< AddCouponInfoRequest xmlns: xsd = \ "http://www.w3.org/ 2001/XMLSchema \ "xmlns: xsi = \" http: //www.w3.org/2001/XMLSchema-instance \ "> \ r \ n \ r \ n \ r \ n ...

J'ai besoin un espace de nommage pur. Objet demandé. Quelle est la meilleure façon de procéder?

Merci à l'avance,

Répondre

1

SerializeToXml est une méthode virtuelle il est donc logique qu'il appelle toujours la méthode surchargée.

Vous pouvez, par exemple, créer une nouvelle méthode pour AddCouponInfoRequest

string SerializeToXmlAsParent() 
{ 
    return base.SerializeToXml(); 
} 
+0

En fait, je dois l'instance de l'objet de demande. J'ai fait la sérialisation juste pour montrer que la conversion n'a pas fonctionné comme je m'y attendais. – anilca

+1

La sérialisation de votre exemple fonctionne exactement comme il se doit. Je crains qu'il n'y ait pas une seule ligne de code pour ignorer la méthode virtuelle redéfinie. Dans votre cas, vous devez utiliser la méthode que j'ai proposée et ensuite utiliser l'objet comme demande ou vous pouvez créer une variante de la méthode Request.BasicSerialize() et la remplacer dans AddCouponInfoRequest pour appeler base.SerializeToXml() Ensuite vous n'avez pas besoin de convertir votre classe de base en AddCouponInfoRequest. Vous vous battez avec une méthode virtuelle en utilisant la méthode virtuelle :-) – ElDog

Questions connexes