Les problèmes de la désérialisation Liste des objets
J'ai du mal à la désérialisation d'une liste d'objets. Je peux obtenir qu'un seul objet à sérialiser un objet, mais ne peut pas obtenir la liste. Je n'obtiens pas d'erreur, elle retourne une Liste vide. C'est le XML qui revient:
<locations>
<location locationtype="building" locationtypeid="1">
<id>1</id>
<name>Building Name</name>
<description>Description of Building</description>
</location>
</locations>
C'est la classe que j'ai et je suis de la désérialisation dans le GetAll
méthode:
[Serializable()]
[XmlRoot("location")]
public class Building
{
private string method;
[XmlElement("id")]
public int LocationID { get; set; }
[XmlElement("name")]
public string Name { get; set; }
[XmlElement("description")]
public string Description { get; set; }
[XmlElement("mubuildingid")]
public string MUBuildingID { get; set; }
public List<Building> GetAll()
{
var listBuildings = new List<Building>();
var building = new Building();
var request = WebRequest.Create(method) as HttpWebRequest;
var response = request.GetResponse() as HttpWebResponse;
var streamReader = new StreamReader(response.GetResponseStream());
TextReader reader = streamReader;
var serializer = new XmlSerializer(typeof(List<Building>),
new XmlRootAttribute() { ElementName = "locations" });
listBuildings = (List<Building>)serializer.Deserialize(reader);
return listBuildings;
}
}
- Qu'est-ce que l'erreur obtenez-vous?
- Quelle liste n'êtes-vous pas voir sérialisé? Si c'est le
GetAll()
méthode, c'est parce que sérialiseurs ne sont pas (ainsi, éventuellement, rarement, je suppose) dans l'entreprise d'invoquer les méthodes de la classe. Ils sont dans l'entreprise de préserver une propriété de l'objet de valeurs. - Je ne suis pas une erreur, c'est juste de retour d'une liste vide. Je n'essaie pas de Sérialiser les GetAll Méthode, je suis l'aide de la Méthode pour Obtenir Tous désérialiser à partir d'un webservice et de la remplir de construction de l'objet.
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Puis désérialiser l'ensemble de la BuildingList objet.
locationtype
etc) qu'il est possible aussi par la décoration de la propriété correspondante avecXmlAttribute
.list.Items
, pour obtenir l'List<Locations>
Je sais que c'est un vieux(re) pose la question, mais j'ai du mal avec cela aujourd'hui, et a trouvé une réponse qui n'a pas besoin d'encapsulation.
Hypothèse 1: Vous avez le contrôle sur la source Xml et comment il est construit.
Hypothèse 2: Vous essayez de serialise le Xml directement dans un
List<T>
objetArrayOfxxx
où xxx est le nom de votre classe (ou le nom spécifié dans XmlType (voir 2.))XmlType
sur la classe.NB: Si votre Type nom (ou un nom de classe commence par une lettre minuscule, vous devez convertir le premier caractère en majuscule.
Exemple 1 - Sans
XmlType
Exemple 2 - Avec
XmlType
Pas sûr de savoir comment Bâtiment correspond à l'emplacement que vous avez dans votre xml, mais pour moi, il ne fait plus de sens que si elles sont nommées de manière équivalente. Au lieu d'utiliser une Liste d'utiliser un LocationList, et il devient:
Vous pouvez ensuite désérialiser comme suit:
Je sais, vieille question, mais il est venu à travers elle, face à un problème similaire.
Bâtiment sur @ricovox de réponse, et dans le contexte de l'OP de la question, c'est le modèle que j'utiliserais pour sérialiser son xml:
L'OP de l'erreur a été de créer un élément de liste à la racine de
Utilisez [XMLArray] pour les propriétés de collection.