2011-04-27 4 views
0

내가 이런 일도 그래서 나에게 익명 형식의 목록을 반환 내가 로했다 xml 파일을 변환 할 찾고 있었다 :변환 XML 태그는

<Input name="MyProperty" datatype="string">a</Input> 
<Input name="SecondProperty" datatype="IPAddress">b</Input> 
<Input name="ThirdProperty" datatype="int">c</Input> 

을하고 싶었로 변환 할 아래와 같은 형식 :

select new 
     { 
     MyProperty=a, 
     SecondProperty=b, 
     ThridProperty=c, 
     } 

는이 작업을 수행 할 수 있을까는 생각은
잘못 다른 method.Also 아무것도 이런 식으로 일을로 공급하는 그 입력의 목록을 반환하는 것입니다? 사전에 속성의 이름을 알고있는 경우

덕분에 어떤 도움이

답변

0

을 감사합니다, 당신은 할 수 있습니다 :

XElement doc = ... 
var obj = new 
{ 
    MyProperty = doc.Root.Elements("Input").First(e => e.Attribute("name") == "MyProperty").Value, 
    SecondProperty = doc.Root.Elements("Input").First(e => e.Attribute("name") == "SecondProperty").Value, 
    ThirdProperty = doc.Root.Elements("Input").First(e => e.Attribute("name") == "ThirdProperty").Value 
} 

당신이 가 이름을 모르는 경우, 당신이 할 수있는 ' 익명 유형을 사용하십시오. 익명 형식은 이름이없는 정상적인 형식이므로 해당 멤버는 정적으로 선언됩니다.

+0

이름 태그의 xml 속성 이름에서 익명 형식의 이름을 생성하려고합니다. 작동 할 수 있습니까? – TommyTwist

+0

아니요. 런타임 시까 지 XML의 내용을 알 수 없기 때문입니다. 익명 형식의 멤버는 컴파일 할 때 알아야합니다. 어쨌든 익명 형식의 속성을 미리 알지 못한다면 어떻게 사용 하시겠습니까? 사전은 아마 당신의 필요에 더 적합 할 것입니다 –

+0

당신의 의견에 대해 Thomas에게 감사드립니다 ...하지만 문제는 제가 런타임에 그 입력의 컬렉션을로드하고 입력에서 입력까지 다양하다는 것입니다. 부모 입력 태그를 기반으로 익명 형식 목록을 반환하는 방법 – TommyTwist

0

당신이 찾고있는 해결책이 될하지만 단지 XML은 직렬화 속성을 가진 클래스를 장식한다에 직면했을 때 내가 도움이 발견했습니다 ... 거기

뭔가를 통해 싶어하지 않을 수 있습니다 ... 그것은 만들 XML과의 직렬화 및 산들 바람. http://msdn.microsoft.com/en-us/library/system.serializableattribute.aspx 출력을 조작하여 필요한 XML 형식을 얻을 수 있습니다. 당신이 여기에 관심을하지 않을 수 있습니다 특성 변화에 대한 귀하의 질문에 대답하지만 대답

편집 할 수있는 것입니다 :

[Serializable] 
public struct SerializableKeyValuePair<TKey, TValue> 
{ 
    public TKey Key { get; set; } 

    public TValue Value { get; set; } 
} 

[Serializable] 
public class Input 
{ 
    public List<SerializableKeyValuePair<string, string>> PropertyBag { get; set; } 
} 

그러나, 모든 속성이 필요합니다 당신이 많이 제어 할 수없는 것 XML로 나타내지는 속성 또는 요소

+0

내가 정적 인 엔티티 대신에 동적 인 타입을 만들려고했기 때문에, 변수 목록을 가질 것이다. 입력의 구조가 같으면, 전체 목록을 직렬화 할 수있을 때까지 – TommyTwist

+0

@TommyTwist 리스트 )를 쉽게 사용할 수 있습니다. – Craig

+0

@TommyTwist 여기에 관심있는 경우 주제에 대한 자습서가 있습니다. http://www.switchonthecode.com/tutorials/csharp-tutorial-xml-serialization – Craig