0

我正在处理一项需要从会话创建 XML 文件的任务。我有一个铸造问题,我知道它来自列表,这是存储购物车中的物品的地方,但我不知道如何解决它。

按钮单击是一个创建 XML 按钮,这是我得到的确切错误: Unable to cast object of type Utils.ShoppingCart' to type 'System.Collections.Generic.List1 [CartItem]'。

Line 86: List<CartItem> cartItems = new List<CartItem>();

Line 87: cartItems = (List<CartItem>)Session["UserCart"];

这是代码。如果我需要提供更多信息,请告诉我。我将不胜感激任何反馈!

 protected void Button1_Click(object sender, EventArgs e)
 {
    ShoppingCart sCart = (ShoppingCart)Session["UserCart"];

    List<CartItem> cartItems = new List<CartItem>();
    cartItems = (List<CartItem>)Session["UserCart"];

    XmlWriterSettings sets = new XmlWriterSettings();
    sets.Indent = true;

    using (XmlWriter writer = XmlWriter.Create(Server.MapPath("~/items.xml"), sets))
    {

        writer.WriteStartDocument();
        writer.WriteStartElement("cartItems");

        foreach (CartItem i in cartItems)
        {
            writer.WriteStartElement("CartItem");
            writer.WriteElementString("ITEM_ID", i.ITEM_ID.ToString());
            writer.WriteElementString("ITEM_QUANTITY", i.ITEM_QUANTITY.ToString());

            writer.WriteEndElement();
        }

        writer.WriteEndElement();
        writer.Flush();
        writer.Close();

        Label1.Text = "XML written successfully!";

        Label2.Text = "<a href='DOM/cart.xml'> XML created successfully. </a>";
    }
}
4

1 回答 1

1

这只是一个猜测,但正如我在上面的评论中所说,您对 Session 的第一次调用似乎没有产生错误(您ShoppingCart从 Session 获取实例)。

看起来您正试图从中检索项目列表ShoppingCart。由于您已经拥有实例(在您第一次调用 Session 时),您需要做的就是访问包含购物车中项目列表的属性(如果有的话),如下所示:

ShoppingCart sCart = (ShoppingCart)Session["UserCart"];

List<CartItem> cartItems = sCart.Items;

以上基于ShoppingCart有一个名为的属性,该属性Items返回一个列表CartItem

你这样做的方式是告诉编译器ShoppingCart从 Session 获取实例并将其转换为 List CartItems,因此我怀疑的错误ShoppingCartCartItems同一个对象:)

于 2013-04-22T00:45:55.867 回答