2009-07-17 7 views
0

Je tente d'enregistrer un objet personnalisé en tant que paramètre utilisateur dans une application VB.net. Cet objet consiste en une liste (Of Pair (Of String, Object)). Pair est une classe personnalisée qui possède deux propriétés de lecture/écriture (une chaîne et un objet).Paramètres utilisateur Sérialisation XML d'un objet

Si je mets des types simples comme int, string, datetime comme deuxième valeur de ma paire, le réglage est enregistré sans aucun problème. Mais si j'essaie de mettre quelque chose de plus complexe, comme une liste, il semble y avoir un problème pendant la sérialisation et mon réglage n'est pas sauvegardé.

Les valeurs de chaîne dans mes paires sont sérialisés comme ceci:

<value1>Priority_1</value1> 

valeurs d'objets sont sérialisés avec un attribut spécial:

<value2 xsi:type="xsd:int">2</value2> 

On dirait que les valeurs de type objet sont différemment sérialisé, « se souvenir "Quel est le vrai type de l'objet. Pourquoi ne peut-il pas faire de même pour des types plus complexes comme List (Of T)? Pouvez-vous imaginer une solution de contournement simple? Toute astuce sur la sérialisation XML qui peut m'aider est également la bienvenue :-)

Répondre

1

Il peut le faire pour un int stocké dans l'objet car il sait comment sérialiser un int. il ne sait pas comment sérialiser votre type complexe.

À moins que vous n'utilisiez le [XmlInclude] attribute pour indiquer quels types pourraient éventuellement apparaître dans cet objet. Dans l'exemple:

[WebMethod()] 
    [XmlInclude(typeof(Car)), XmlInclude(typeof(Bike))] 
    public Vehicle Vehicle(string licenseNumber) { 
     if (licenseNumber == "0") { 
     Vehicle v = new Car(); 
     v.licenseNumber = licenseNumber; 
     return v; 
     } 
     else if (licenseNumber == "1") { 
      Vehicle v = new Bike(); 
      v.licenseNumber = licenseNumber; 
      return v; 
     } 
     else { 
     return null; 
     } 
    } 

[XmlRoot("NewVehicle")] 
public abstract class Vehicle { 
    public string licenseNumber; 
    public DateTime make; 
} 

public class Car : Vehicle { 
} 

public class Bike : Vehicle { 
} 
+0

j'ai ajouté XmlInclude attributs de ma classe sérialisés et il fonctionne maintenant. Merci beaucoup!! –

Questions connexes