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


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

이 코드도 작동합니다. 그러나 역동적이지 않습니다. [XmlRoot("A")] ~ [XmlRoot(ConfigurationManager.AppSettings[someValue])]을 원합니다. 하지만 구문 오류가 발생합니다. 그럼 난 이걸 시도해.어떻게하면 XmlElement 이름을 동적으로 변경할 수 있습니까?

public class Foos 
    { 
     [XmlElement("A1")] 
     public List<Foo> FooList{ get; set; } 
    } 
var serializer = new XmlSerializer(typeof(Foos),new XmlRootAttribute(ConfigurationManager.AppSettings[someValue])); 

이것은 단지 루트 요소 일 뿐이다. 나는 일하고있다. FooList의 "XmlElement"값을 동적으로 변경할 수 없습니다. 클래스에 둘 이상의 요소가있을 수 있습니다. 어떻게 모두 동적으로 XmlElement 값을 변경합니까?

+1

을 설정을 선택합니다. 나는 이것을 썼다. "이것은 단지 루트 요소"입니다. 하지만 내부 클래스 요소가 필요합니다. –

+0

내 실수. 나는 내 의견을 말했습니다. –

답변

1

올바른 방법으로 XmlAttributesOverrides를 사용해야합니다. Please Check.

코드의 실제 버전은 여기에 있습니다.

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); 
     } 
    } 
} 

앱은 @BassemAkl 그냥 루트 요소입니다

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

출력

<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

정말 고마워요. –

+0

@MuhammetCanTONBUL, 코드를 정확히 변경했습니다. 나는 당신이 이미 해결책을 찾았다 고 생각하지만, 그렇게하는 것이 낫다. –

+1

좋은 것으로 보인다. 다시 고마워한다. –

관련 문제