2016-07-06 4 views
0

내가이설정 모델 속성은

<Root> 
    <Element1>17890</Element> 
    <Element2>0001</Element2> 
    <Element3>123451324A</Element3> 
    <Element4>1</Element4> 
    <Element5>ABC</Element5> 
    <Element6>DEF</Element6> 
    <Element7>99.10</Element7> 
    <Element8>GHI</Element8> 
    <Element9>2014-01-25</Element9> 
    <Element10>JKL</Element10> 
    <Element11>737268</Element11> 
</Root> 

과 같은 xml 파일이 내가 속성으로 모든 요소 이름이 해당 클래스가 값. 이제 나는 그런 내가 xml 파일의 요소 값에 클래스의 속성 값을 설정하는 방법

IEnumerable<XElement> elements; 

모든 요소의 컬렉션을 가지고 있다고 가정 해 봅시다?

내가 생각 한 유일한 요소를 통해 루프과 같은

... 
case "Element3": 
    model.Element3 = element.Value; 
    break; 
... 

더 나은 솔루션이 있습니까

등의 섹션으로 큰 switch 문을?

+0

모델에 xml에 나타나는 모든 필드가 있습니까? – derloopkat

+0

직렬화를 사용할 수없는 이유 : [XmlSerializer Class] (https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer (v = vs.110) .aspx) – Fabio

+0

예 모델 모든 필드가 xml에 나타납니다. – Spennet

답변

0

당신은 이미 당신이 XML에서 얻을 할 필드와 클래스 모델을 가정 :

var elements = XDocument.Load("XMLFile1.xml").Root.Elements(); 
var model = new Model() 
{ 
    Element1 = elements.FirstOrDefault(t => t.Name.LocalName == "Element1"), 
    Element2 = elements.FirstOrDefault(t => t.Name.LocalName == "Element2"), 
}; 
또 다른 옵션은 모델마다 A를 업데이트 할 필요가 없습니다, 사전을 만드는 것입니다

새 태그 이름이 xml 파일에 추가됩니다. 마지막으로 당신이 XML에서 직접 동적 객체를 생성 할 수 있습니다

var model = elements.ToDictionary(e => e.Name.LocalName, e => e.Value); 

Linq에

를 사용

var model = new Dictionary<string, string>(); 
foreach(XElement tag in elements) 
{ 
    model[tag.Name.LocalName] = tag.Value; 
} 

또는. 여기에 예제가 있습니다. Deserialize XML To Object using Dynamic