2017-09-19 5 views
0

에 노드를 포함.C#의 deserializate XML을 내가</p> <pre><code><Tender SubTenderType="BC" TenderType="Check"> <TenderTotal> <Amount>10.00</Amount> </TenderTotal> </Tender> </code></pre> <p>내가 클래스로 변환 할 필요가 XML 문서의 일부가 클래스 속성

public class Tender 
{ 
    public string SubTenderType { get; set; } 
    public string TenderType { get; set; } 
    public decimal Amount { get; set; } 
} 

내가 이미 작성한 작업입니다. 하지만 interseing 내가 위에 쓰여진대로 수업에 XML deserialize 수 있습니까?

[Serializable] 
public class Tender 
{ 
    [XmlAttribute("SubTenderType")] 
    public string SubTenderType { get; set; }  

    [XmlAttribute("TenderType")] 
    public string TenderType { get; set; }  

    [XmlElement("TenderTotal")] 
    public TenderTotal TenderTotal { get; set; } 
} 

[Serializable] 
public class TenderTotal 
{ 
    [XmlElement("Amount")] 
    public decimal Amount { get; set; } 
} 
당신은 (다른 종류의 새로운 객체를 생성)

지도를 만들려면 유형을 매핑 할 첫 번째 유형 "입찰"을 다음 사용 autoMapper XML을 역 직렬화 할 수

+0

[개체에 xml을 비 직렬화하는 방법] 가능한 복제본 (https://stackoverflow.com/questions/10518372/how-to-deserialize-xml-to-object) – OlegI

+0

존재하는 답변이 많습니다. https://stackoverflow.com/questions/10518372/how-to-deserialize-xml-to-object https://stackoverflow.com/questions/364253/how-to-deserialize- xml-document – OlegI

+0

@OlegI 중복되지 않습니다. – mi4man

답변

0

:

config.CreateMap<TenderFirst, TenderSecond>().ForMember(x => x.TenderTotal.Amount, y => y.Amount()) 
0

당신이 할 수있는 그건 IXmlSerializable을 구현하여 xml 커스텀 직렬화를 사용하는 것입니다. 그러나 사용자 지정 직렬화에 대한 성능 저하가 발생합니다.
당신은 XmlAttribute없이 다음 클래스를 갖는이 문서 Custom XML Serialization

0

에 모습을 가질 수 있습니다

public class Tender 
{ 
    public string SubTenderType { get; set; } 
    public string TenderType { get; set; } 
    public decimal Amount { get; set; } 
} 

당신은 같은 방식으로 시리얼의 동작을 재정의 할 XmlAttributeOverrides 클래스를 사용할 수 있습니다 대신 요소의 그것은 속성을 수행합니다.

var attrSTT = new XmlAttributes { XmlAttribute = new XmlAttributeAttribute("SubTenderType") }; 
var attrTT = new XmlAttributes { XmlAttribute = new XmlAttributeAttribute("TenderType") }; 

var overrides = new XmlAttributeOverrides(); 
overrides.Add(typeof(Tender), nameof(Tender.SubTenderType), attrSTT); 
overrides.Add(typeof(Tender), nameof(Tender.TenderType), attrTT); 

var xs = new XmlSerializer(typeof(Tender), overrides); 

그러나이 방법으로는 새로운 항목을 추가하거나 다른 요소에 하나의 요소를 감쌀 수 없습니다.


따라서, 사용자 정의 직렬화를 수행하거나 서로 유형 또는 작성하는 사용자 지정 XML 리더/라이터를지도하거나 읽기를 수행/(linq2xml를 사용하여, 예를 들어)를 수동으로 작성해야합니다. 다양한 방법이 있습니다 ...