Comment implémenter la sérialisation Xml avec des classes héritées en C #
J'ai deux classes : la classe de base Composant de nom et inheritd classe nommée DBComponent
[Serializable]
public class Component
{
private string name = string.Empty;
private string description = string.Empty;
}
[Serializable]
public class DBComponent : Component
{
private List<string> spFiles = new List<string>();
//Storage Procedure Files
[XmlArrayItem("SPFile", typeof(string))]
[XmlArray("SPFiles")]
public List<string> SPFiles
{
get { return spFiles; }
set { spFiles = value; }
}
public DBComponent(string name, string description)
: base(name, description)
{ }
}
[Serializable]
public class ComponentsCollection
{
private static ComponentsCollection instance = null;
private List<Component> components = new List<Component>();
public List<Component> Components
{
get { return components; }
set
{
components = value;
}
}
public static ComponentsCollection GetInstance()
{
if (ccuInstance == null)
{
lock (lockObject)
{
if (instance == null)
PopulateComponents();
}
}
return instance;
}
private static void PopulateComponents()
{
instance = new CCUniverse();
XmlSerializer xs = new XmlSerializer(instance.GetType());
instance = xs.Deserialize(XmlReader.Create("Components.xml")) as ComponentsCollection;
}
}
}
Je veux lire\écrire à partir d'un fichier Xml. Je sais que j'ai besoin pour mettre en œuvre la Sérialisation pour DBComponent classe sinon il ne sera pas lue.Mais je ne peut pas trouver un simple article. tous les articles que j'ai trouvé sont trop complexes pour ce scénario simple.
Le fichier Xml ressemble à ceci:
<?xml version="1.0" encoding="utf-8" ?>
<ComponentsCollection>
<Components>
<DBComponent Name="Tenant Historical Database" Description="Tenant Historical Database">
<SPFiles>
<SPFile>Setup\TenantHistoricalSP.sql</SPFile>
</SPFiles>
</DBComponent>
<Component Name="Agent" Description="Desktop Agent" />
</Components>
</ComponentsCollection>
Quelqu'un peut-il me donner un exemple simple de la façon de lire ce genre de fichier xml et ce qui devrait être mis en œuvre ?
Grâce
Lior
source d'informationauteur liorafar
Vous devez vous connecter pour publier un commentaire.
Malheureusement, vous devez dire à la
XmlSerializer
les classes que vous avez l'intention de sérialiser ou désérialiser l'aide de laXmlArrayItem()
attribut. Chaque type doit également son propre nom de l'élément. Par exemple:Ce serait de lire un fichier XML comme:
Plusieurs instances de chaque élément peuvent être présents (ou aucun).
Deux options pour les différents scenrios: dites à la classe de base
Ou: dire la collection:
En fait, vous pouvez également utiliser [XmlElement(...)] au lieu de [XmlArrayItem] si vous ne voulez pas de l'extérieur nœud (Composants). Aussi: vous n'avez pas besoin [Serializable].
Si vous avez déjà mis en œuvre en classe de sérialisation aussi loin que je peux voir à partir de votre code? Si vous essayez de récupérer les objets à partir de vos fichiers XML puis utilisez deserializer:
Système.Xml.La sérialisation.XmlSerializer.Désérialiser
Si vous n'avez pas, n'oubliez pas que vous pouvez toujours générer le code à partir du Schéma XML