2017-09-19 4 views
0

私は、XML文書C#deserializate XMLの組み込みノード

<Tender SubTenderType="BC" TenderType="Check"> 
    <TenderTotal> 
     <Amount>10.00</Amount> 
    </TenderTotal> 
</Tender> 

の一部を持っている私はクラスに変換する必要があります。

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

私が既に書いたものとこの作品。しかし、私は上記のようにクラスに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

を見て持つことができます。あなたが代わりに要素のようにシリアライザの動作をオーバーライドするXmlAttributeOverridesクラスを使用することができます

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

をそれは属性を行うでしょう。

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を使用して、たとえば)を手動で記述する必要があります。多くの方法があります。

関連する問題