1

私は次のXMLを持っています:

    <MovieRunTimes>
      <ShowDate>6/9/2012</ShowDate>
      <ShowTimesByDate xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
        <a:string>12:25</a:string>
        <a:string>17:30</a:string>
        <a:string>22:35</a:string>
      </ShowTimesByDate>
      <TicketURI>http://www.fandango.com/tms.asp?t=AANCC&amp;m=112244&amp;d=2012-06-09</TicketURI>
    </MovieRunTimes>

そして、次のC#クラス:

public class MovieRunTimes
{
    [XmlElement("ShowDate")]
    public string ShowDate { get; set; }

    [XmlElement("TicketURI")]
    public string TicketUri { get; set; }

    [XmlArray("ShowTimesByDate", Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")]
    public List<string> ShowTimesByDate { get; set; }

}

残念ながら、逆シリアル化した後、ShowTimesByDateは空になります。ShowTimesByDate要素から名前空間を削除し、string要素からプレフィックスを削除すると、正常に逆シリアル化されます。名前空間を正しく使用してXMLを逆シリアル化するにはどうすればよいですか?

4

2 に答える 2

4

これを行う方法を発見しました。クラスを次のように修正した場合:

public class MovieRunTimes
{
    [XmlElement("ShowDate")]
    public string ShowDate { get; set; }

    [XmlElement("TicketURI")]
    public string TicketUri { get; set; }

    [XmlArray("ShowTimesByDate")]
    [XmlArrayItem(Namespace = "http://schemas.microsoft.com/2003/10/Serialization/Arrays")]
    public List<string> ShowTimesByDate { get; set; }

}

正しくデシリアライズします。

于 2012-06-26T16:09:42.557 に答える
1

トリックは、コレクション ラッパー要素に名前空間プレフィックス (この場合は "a") を追加することです。

<MovieRunTimes >
  <ShowDate>6/9/2012</ShowDate>
  <a:ShowTimesByDate xmlns:a="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
    <a:string>12:25</a:string>
    <a:string>17:30</a:string>
    <a:string>22:35</a:string>
  </a:ShowTimesByDate>
  <TicketURI>http://www.fandango.com/tms.asp?t=AANCC&amp;m=112244&amp;d=2012-06-09</TicketURI>
</MovieRunTimes>

それが、このコードでシリアル化した後の結果です。

        XmlSerializer xs = new XmlSerializer(typeof(MovieRunTimes));
        XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
        ns.Add("a", "http://schemas.microsoft.com/2003/10/Serialization/Arrays");
        string result = null;
        using(StringWriter writer = new StringWriter())
        {
            xs.Serialize(writer,mrt,ns);
            result = writer.ToString();
        }
于 2012-06-26T15:45:33.467 に答える