2013-08-02 6 views
9

動作しません。これは、XMLストリームである:deserialisingは

<?xml version="1.0" encoding="utf-8" ?> 
<historydetails> 
    <taskEvent> 
     <eventtype>Transitions</eventtype> 
     <historyevent>Task moved</historyevent> 
     <details>From 'Requested' to 'In Validation'</details> 
     <author>NAme</author> 
     <entrydate>01 Jul 13, 11:34</entrydate> 
     <historyid>2620</historyid> 
    </taskEvent> 
    <taskEvent> 
     <eventtype>Updates</eventtype> 
     <historyevent>Subtask marked done</historyevent> 
     <details>Subtask: visualise status and versions</details> 
     <author>NAme2</author> 
     <entrydate>21 Jun 13, 10:16</entrydate> 
    <historyid>2588</historyid> 
    </taskEvent> 
</historydetails> 

対応するクラスは、次のようになります。(文字列置換は、XMLコードが含まれている)は、XMLをdeserialiseする

public class historydetails 
{ 
    [XmlElement("taskEvent")] 
    List<taskEvent> eventList = new List<taskEvent>(); 
} 

public class taskEvent 
{ 
    string eventtype { get; set; } 
    string historyevent { get; set; } 
    string details { get; set; } 
    string author { get; set; } 
    string entrydate { get; set; } 
    string historyid { get; set; } 
} 

コード:

XmlSerializer deserializer = new XmlSerializer(typeof(historydetails));        
object obj = obj = deserializer.Deserialize(stringToStream(replacement));   
historydetails XmlData = (historydetails)obj; 

方法stringToStream

private MemoryStream stringToStream(string input) 
{ 
    byte[] byteArray = Encoding.ASCII.GetBytes(input); 
    MemoryStream stream = new MemoryStream(byteArray); 
    return stream; 
} 

結果は次のようになります。 オブジェクトXmlDataが作成され、taskEventsのリストがあります。 問題は、リストそのものである:それは空です...

+3

であなたの授業の準備ができているよ、あなたはオブジェクトを自分で投入し、それをシリアル化しようとしたことがあり比較するXMLに?要素の階層に問題がある場合は、すぐに気付くでしょう。 –

+0

あなたが 'try {/ * fail * /} catch(Exception ex){ex.ToString();}を実行しない限り、"動かない " } 'を実行し、' ToString'の結果をあなたの質問に追加してください。 – Will

+1

、彼はエラーを取得していません。彼は有効なXMLオブジェクトを取得していますが、空です。 – BlargleMonster

答えて

10

あなたは今後の参考のために、余談として

public class historydetails 
{ 
    [XmlElement("taskEvent")] 
    public List<taskEvent> eventList = new List<taskEvent>(); 
} 

    public class taskEvent 
{ 
    public string eventtype { get; set; } 
    public string historyevent { get; set; } 
    public string details { get; set; } 
    public string author { get; set; } 
    public string entrydate { get; set; } 
    public string historyid { get; set; } 
} 
4

パブリックメンバーをしなければならない(のVisual Studio 2012またはWebEssentialsプラグイン付き)いくつかのサンプルXMLコンテンツデータに基づいてクラスを作成する最も簡単な方法の1つは、クリップボードにコピーして組み込みのVS関数を使用することです。編集 - >形式を選択して貼り付け - > XMLをクラスとして貼り付けクラスファイル。

  • それはそれは速いです
  • あなたが遭遇したようなエラーの少ないスペースを残し、
  • 、あなたは数秒
+0

これはXSDジェネレータツールを使用していますか? – Aphelion

+1

良い質問、私は現時点では分かりません。私は実装のためにILの周りを見てきましたが、私はあきらめました。それがどのように行われたのか知ることは面白いだろう。 –

関連する問題