9

これは xml ストリームです。

<?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>

対応するクラスは次のようになります。

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; }
}

xml を逆シリアル化するコード (文字列置換には xml コードが含まれます):

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 のリストがあります。問題はリスト自体にあります: それは空です...

4

2 に答える 2

4

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

  • あなたが遭遇したようなエラーのためのスペースが少なくなり、
  • 高速です。数秒でクラスの準備が整います
于 2013-08-02T13:19:26.517 に答える