2017-12-11 6 views
0
[XmlRoot("A")] 
public class Foos 
{ 
    [XmlElement("A1")] 
    public List<Foo> FooList{ get; set; } 
} 


var serializer = new XmlSerializer(typeof(Foos)); 

Dieser Code funktioniert auch. Aber es ist nicht dynamisch. Ich möchte [XmlRoot("A")] bis [XmlRoot(ConfigurationManager.AppSettings[someValue])]. Aber wirf zu Syntaxfehler. Dann probiere ich dasWie ändere ich den XmlElement-Namen dynamisch?

Dies ist Arbeit nur Root-Element.Ich arbeite. Ich konnte den "XmlElement" -Wert der FooList nicht dynamisch ändern. Es kann mehr als ein Element in der Klasse geben. Wie ändere ich den XmlElement-Wert von allen dynamisch?

+1

@BassemAkl nur für Wurzelelement ist. Ich habe das geschrieben. "Das ist Arbeit nur Wurzelelement". Aber ich will für innere Klassenelemente. –

+0

Mein Fehler. Ich nahm meinen Kommentar zur Kenntnis. –

Antwort

1

Sie müssen XmlAttributesOverrides richtig verwenden. Please Check.

Arbeitsversion Ihres Codes ist hier.

public class Foos 
{  
    public List<Foo> FooList { get; set; } 
} 


public class Foo 
{ 
    public string Name { get; set; } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 

     var xmlAttributeForFoos = new XmlAttributes { XmlRoot = new XmlRootAttribute(ConfigurationManager.AppSettings["someFoosValue"]), XmlType = new XmlTypeAttribute(ConfigurationManager.AppSettings["someFoosValue"]) }; 
     var xmlAttributeForFooList = new XmlAttributes(); 
     var xmlAttributeForFoo = new XmlAttributes(); 

     xmlAttributeForFooList.XmlElements.Add(new XmlElementAttribute(ConfigurationManager.AppSettings["someFooValue"])); 
     xmlAttributeForFoo.XmlElements.Add(new XmlElementAttribute(ConfigurationManager.AppSettings["someFooNameValue"])); 

     var overrides = new XmlAttributeOverrides(); 
     overrides.Add(typeof(Foos), xmlAttributeForFoos); 
     overrides.Add(typeof(Foos), "FooList", xmlAttributeForFooList); 
     overrides.Add(typeof(Foo), "Name", xmlAttributeForFoo); 

     XmlSerializer serializer = new XmlSerializer(typeof(Foos), overrides); 

     var foos = new Foos 
     { 
      FooList = new List<Foo> 
      { 
       new Foo{Name = "FooName"} 
      } 
     }; 

     using (var stream = File.Open("file.xml", FileMode.OpenOrCreate)) 
     { 
      serializer.Serialize(stream, foos); 
     } 
    } 
} 

App-Einstellungen

<appSettings> 
    <add key="someFoosValue" value="SomeFoos"/>  
    <add key="someFooValue" value="SomeFoo"/> 
    <add key="someFooNameValue" value="FooName"/> 
</appSettings> 

Ausgang

<SomeFoos xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <SomeFoo> 
    <FooName>FooName</FooName> 
    </SomeFoo> 
</SomeFoos> 
+0

Vielen Dank. –

+0

@MuhammetCanTONBUL, Ich habe den Code geändert, was Sie genau wollen. Ich nehme an, dass Sie schon die Lösung gefunden haben, aber es ist besser so zu bleiben. –

+1

Scheint gut, danke nochmal. –

Verwandte Themen