2011-03-02 3 views
0
new XElement ("EffectFile", 
    new XElement ("Effects", this.Effects.Select (
     e => new XElement ("Options", e.Options.Select (
      o => new XElement ("Option", o)))))) 

Je suis en train d'ajouter un attribut à la Option dans la dernière ligne appelée Type, avec une valeur qui contient le type de o qui est de type Object mais je veux conserver la valeur o.GetType() puis l'utiliser plus tard dans l'analyse du fichier xml, à partir de laquelle la valeur de la chaîne sera renvoyée à cette valeur.Comment sauvegarder des attributs en utilisant XElement?

Je suis pas sûr de savoir comment je pouvais faire un casting de programmation dans le code où la distribution se présente comme suit:

object option = (object) (typeStoredInXml) o; 

mais à la fin la valeur option sera du type réel, même si il ressemble à un objet, mais pas à une chaîne, à moins que le type réel ne soit une chaîne.

EDIT: Voici comment le xml devrait ressembler à:

<Effect> 
    <Type>Blur</Type> 
    <Options> 
    <Option Type="int">88</Option> 
    </Options> 
</Effect> 

L'attribut type peut sembler différent, je ne sais pas si o.GetType() ressemblerait que si elle était un int, mais c'est juste pour donner une idée.

Répondre

2

Est-ce le genre de choses que vous cherchez?

new XElement ("EffectFile", 
    new XElement ("Effects", this.Effects.Select (
     e => new XElement ("Options", e.Options.Select (
      o => new XElement ("Option", o, 
       new XAttribute("Type", o.GetType())))))) 

De toute évidence, cela ne fonctionnera que si o est non nul. Par ailleurs, vous voudrez peut-être vous pencher sur la sérialisation XML, car il semble que ce soit essentiellement ce que vous allez faire de toute façon. Il existe des bibliothèques spécialement conçues pour vous aider dans ce domaine, vous n'avez donc pas besoin d'émettre et d'analyser manuellement XML.

+0

Merci, mais vous gardez toujours 'o'? Je veux stocker à la fois o et type, mais le type étant un attribut. –

+1

@Joan Venge: Que voulez-vous que le XML final ressemble? 'o' serait très différent selon qu'il s'agit d'un' int' ou d'un 'Customer'. – StriplingWarrior

+0

Merci d'avoir édité la question pour montrer le xml. Désolé 'o' est la valeur de l'option, donc 88 dans ce cas. –

Questions connexes