2016-04-19 16 views
0

私はちょうどC#の作業を開始し、.NETフレームワークが持つ偉大なXmlSerializerについて学びました。逆シリアル化中にXmlパラメータを使用してオブジェクトを構築する

私はそうのようなクラスを注釈を付けました:

Tはジェネリック型である
XmlSerializer s = new XmlSerializer(T); 
s.Deserialize(response.GetResponseStream()); 

:私はすでにとの基本的な直列化復元を行うことができます

[XmlRoot("time_entry")] 
    public class TimeEntry 
    { 
     [XmlElement("id")] 
     public int Id { get; set; } 

     [XmlElement("project"), XmlAttribute("id")] 
     public int ProjectId { get; set; } 

     [....] 
    } 

。私の目標は今、さらに一歩これを取ることであり、このXMLを与えられた:

<time_entries type="array" limit="25" offset="0" total_count="254"> 
    <time_entry> 
     <id>299</id> 
     <project id="152" name="Test"/> 
     <issue id="1314"/> 
     <user id="2" name="Anonymous"/> 
     <activity id="9" name="Development"/> 
     <hours>10.0</hours> 
     <comments/> 
     <spent_on>2015-11-09</spent_on> 
     <created_on>2015-11-10T17:31:57Z</created_on> 
     <updated_on>2015-11-10T17:31:57Z</updated_on> 
    </time_entry> 
</time_entries> 

自動的に既存の辞書に、代わりにTimeEntryクラスにProjectId属性を設定する指定したidを持つプロジェクトを見つけ、私は思います<project> XML要素のid属性を使用して見つかったProjectのインスタンスに置き換えます。

これはどういうことですか?私はgetterですぐに何かを行うことを考えていたかもしれませんが、フィールドのタイプが変わるとすぐに、要素がスキップされるようです。

PS:私はシリアル化プロセスに本当に関心がないので、 ...

答えて

0

TimeEntryでIXmlSerializableを実装して、オブジェクトがどのように逆シリアル化されるかを完全に制御してみてください。デシリアライズ時に、既存のProjectインスタンスを割り当てることができます。

関連する問題