2017-11-16 4 views
0

현재 .NET 4.6 콘솔 응용 프로그램에서 작업 중입니다. 파일에서 XML을 구문 분석/직렬화하려고합니다.XML은 속성이있는 복합 유형을 직렬화합니다.

현재 XML의 복합 유형 직렬 처리에 어려움을 겪고 있습니다. 이에 따라 XSD 사양입니다뿐만 아니라

<cool_element> 
    <master visible="true">A1</master> 
</cool_element> 

: 감안할 때

다음 XML 요소

C#에서 내 직렬화 클래스는 다음과 같습니다
<xs:element name="cool_element"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="master"> 
      <xs:complexType> 
       <xs:simpleContent> 
        <xs:extension base="xs:string"> 
        <xs:attribute type="xs:string" name="visible"/> 
       </xs:extension> 
       </xs:simpleContent> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

:

[XmlRoot(ElementName = "cool_element")] 
public class CoolElement 
{ 
    [XmlElement("master")] 
    public string Master { get; set; } 
} 

이를 문자열 값을 검색하기 위해 잘 작동합니다. 하지만 속성을 내 마스터 요소에서 볼 수있는 방법을 모르겠습니다.

해결 방법에 대한 아이디어가 있으십니까?

감사합니다.

 CoolElement cool = null; 
     string path = @"yourxmlfilename.xml"; 
     XmlSerializer serializer = new XmlSerializer(typeof(CoolElement)); 
     using (var reader = XmlReader.Create(path)) 
     { 
      cool = (CoolElement)serializer.Deserialize(reader); 
      Console.WriteLine("master value: " + cool.master.Value); 
      Console.WriteLine("attribute visible value: " + cool.master.visible); 
     } 

가 수행합니다

다음
[XmlRoot(ElementName = "cool_element")] 
public class CoolElement 
{ 
    private Master masterField; 
    public Master master { get { return this.masterField; } set { this.masterField = value; } } 
} 

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
public class Master 
{ 
    private bool visibleField; 

    private string valueField; 

    [System.Xml.Serialization.XmlAttributeAttribute()] 
    public bool visible { get { return this.visibleField; } set { this.visibleField = value; } } 

    [System.Xml.Serialization.XmlTextAttribute()] 
    public string Value { get { return this.valueField; } set { this.valueField = value; } } 
} 

데이터를 읽을 수 :

답변

1

마스터해야 그것은 자신의 개체 클래스이다, 나는 이런 식으로합니다 (XML 값 눈에 보이는 속성주의를) 해결할 것 그게 당신을 돕니?

+0

감사합니다. 도움이 많이 :) :) ... 나는 마스터 클래스를 약간 단순화했다, 나는 단지 속성 만 사용하고 개인 멤버는 사용하지 않는다. – TimHorton

+0

굉장히 도움이 될 수있어서 기쁩니다. – cliveve