从会话创建XML文件时无法强制转换对象

本文关键字:转换 对象 会话 创建 XML 文件 | 更新日期: 2023-09-27 18:10:25

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

按钮点击是一个创建XML按钮,这是我得到确切的错误:Unable to cast object of type Utils.ShoppingCart' to type 'System.Collections.Generic.List 1 (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>";
    }
}

从会话创建XML文件时无法强制转换对象

这只是一个猜测,但正如我在上面的评论中所说,看起来您对Session的第一次调用并没有创建错误(您从Session获得ShoppingCart实例)。

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

ShoppingCart sCart = (ShoppingCart)Session["UserCart"];
List<CartItem> cartItems = sCart.Items;

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

你这样做的方式是告诉编译器从会话中获得ShoppingCart实例并将其转换为CartItems的列表,因此我怀疑ShoppingCartCartItems是相同的对象:)