1

次のようなXMLを逆シリアル化したい:

XML:

     <bookings>
        <booking>
           <timeStart>2012/7/2 11:00:00</timeStart>
           <timeEnd>2012/7/2 12:00:00</timeEnd>
        </booking>
        <booking>
            <timeStart>2012/7/10 08:30:00</timeStart>
            <timeEnd>2012/7/10 10:30:00</timeEnd>
        </booking>         
     </bookings>

私のコード:

       var calUrlStr = "http://xxx.com?action=xxxxxx?x=1&y=2";

       HttpWebRequest webRequest = GetWebRequest(calUrlStr);
       HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();

       XmlRootAttribute xRoot = new XmlRootAttribute();
       xRoot.ElementName = "bookings";
       xRoot.IsNullable = true;

       XmlSerializer xmlSerializer = new XmlSerializer(typeof(MyDomain.GCalBooking.GCalBookings), xRoot);

       Stream theStream = response.GetResponseStream();
       StreamReader reader = new StreamReader(theStream);

       MyDomain.GCalBooking.GCalBookings rateResponse = (MyDomain.GCalBooking.GCalBookings)xmlSerializer.Deserialize(reader);

私のクラス:

namespace MyDomain.GCalBooking
{
    public class GCalBookings
    {

        public virtual List<Booking> Bookings { get; set; }


    }

    public class Booking
    {

        public string timeStart { get; set; }
        public string timeEnd { get; set; }

    }
}
4

2 に答える 2

5

クラスに を追加XmlElementAttribtueします。

public class GCalBookings
{
    [XmlElement("booking")]
    public virtual List<Booking> Bookings { get; set; }
}

補足: このような問題をデバッグするには、クラスにデータを入力してシリアライズし、XML の構造がどのように見えるかを調べてください。次に、結果の XML がデシリアライズしたいもののようになるまで、クラスを微調整できます。

于 2012-06-20T15:31:46.210 に答える
1

問題は、デシリアライザーが list<> プロパティの SET メソッドを使用しないことですが、GET メソッドを経由してから、各項目に対して ADD を呼び出します。つまり、プロパティの予約は ctor を介して初期化する必要があります。

c# System.Xml.Serialization が Public List<T> の set メソッドを通過しないを参照してください

于 2013-11-13T20:37:21.880 に答える