Comment pour désérialiser ce document XML :
J’ai ceci :
.
.
qui ne semble pas fonctionner :-(
Comment pour désérialiser ce document XML :
J’ai ceci :
.
.
qui ne semble pas fonctionner :-(
Que diriez vous juste enregistrez le code xml dans un fichier et utilisez xsd?
Et voilà - et le fichier de code c# qui devrait être capable de lire les données via `` :
(inclure le foo.cs généré dans le projet)
Voici une version de travail. J'ai changé le XmlElementAttribute étiquettes à XmlElement parce que dans le xml de la StockNumber Modèle, la marque et les valeurs sont des éléments, non pas les attributs. Aussi j'ai enlevé le lecteur.ReadToEnd(); (cette fonction lit le flux entier et retourne une chaîne de caractères, de sorte que le Deserialze() la fonction ne pouvais pas utiliser le lecteur de...plus la position a à la fin du flux). J'ai aussi pris quelques libertés avec le nom :).
Voici les catégories:
[Serializable()]
public class Car
{
[System.Xml.Serialization.XmlElement("StockNumber")]
public string StockNumber { get; set; }
[System.Xml.Serialization.XmlElement("Make")]
public string Make { get; set; }
[System.Xml.Serialization.XmlElement("Model")]
public string Model { get; set; }
}
[Serializable()]
[System.Xml.Serialization.XmlRoot("CarCollection")]
public class CarCollection
{
[XmlArray("Cars")]
[XmlArrayItem("Car", typeof(Car))]
public Car[] Car { get; set; }
}
Le Désérialiser fonction:
CarCollection cars = null;
string path = "cars.xml";
XmlSerializer serializer = new XmlSerializer(typeof(CarCollection));
StreamReader reader = new StreamReader(path);
cars = (CarCollection)serializer.Deserialize(reader);
reader.Close();
Et légèrement tordu xml (j'ai besoin d'ajouter un nouvel élément à envelopper <Voiture>...Net est pointilleux sur la désérialisation des tableaux):
<?xml version="1.0" encoding="utf-8"?>
<CarCollection>
<Cars>
<Car>
<StockNumber>1020</StockNumber>
<Make>Nissan</Make>
<Model>Sentra</Model>
</Car>
<Car>
<StockNumber>1010</StockNumber>
<Make>Toyota</Make>
<Model>Corolla</Model>
</Car>
<Car>
<StockNumber>1111</StockNumber>
<Make>Honda</Make>
<Model>Accord</Model>
</Car>
</Cars>
</CarCollection>
Vous avez deux possibilités.
Supposons que vous avez votre fichier XML dans cet emplacement C:\path\to\xml\file.xml
Start Menu > Programs > Microsoft Visual Studio 2012 > Visual Studio Tools
Ou si vous avez Windows 8 pouvez commencer à taper le Développeur de l'Invite de Commande dans l' écran de Démarrage
cd /D "C:\path\to\xml"
xsd file.xml
xsd /c file.xsd
Et c'est tout! Vous avez généré des classes C# à partir du fichier xml en C:\path\to\xml\file.cs
Requis Visual Studio 2012+
Edit > Paste special > Paste XML As Classes
Et c'est tout!
L'utilisation est très simple avec cette classe d'assistance:
using System;
using System.IO;
using System.Web.Script.Serialization; // Add reference: System.Web.Extensions
using System.Xml;
using System.Xml.Serialization;
namespace Helpers
{
internal static class ParseHelpers
{
private static JavaScriptSerializer json;
private static JavaScriptSerializer JSON { get { return json ?? (json = new JavaScriptSerializer()); } }
public static Stream ToStream(this string @this)
{
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write(@this);
writer.Flush();
stream.Position = 0;
return stream;
}
public static T ParseXML<T>(this string @this) where T : class
{
var reader = XmlReader.Create(@this.Trim().ToStream(), new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Document });
return new XmlSerializer(typeof(T)).Deserialize(reader) as T;
}
public static T ParseJSON<T>(this string @this) where T : class
{
return JSON.Deserialize<T>(@this.Trim());
}
}
}
Tout ce que vous avez à faire maintenant, c'est:
public class JSONRoot
{
public catalog catalog { get; set; }
}
// ...
string xml = File.ReadAllText(@"D:\file.xml");
var catalog1 = xml.ParseXML<catalog>();
string json = File.ReadAllText(@"D:\file.json");
var catalog2 = json.ParseJSON<JSONRoot>();
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.