从会话创建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>";
}
}
这只是一个猜测,但正如我在上面的评论中所说,看起来您对Session的第一次调用并没有创建错误(您从Session获得ShoppingCart
实例)。
看起来您正在尝试从ShoppingCart
检索项目列表。由于已经有了实例(在对Session的第一次调用中),因此需要做的就是访问包含购物车中商品列表的属性(如果有),如下所示:
ShoppingCart sCart = (ShoppingCart)Session["UserCart"];
List<CartItem> cartItems = sCart.Items;
以上是基于ShoppingCart
有一个名为Items
的属性,该属性返回CartItem
的列表。
你这样做的方式是告诉编译器从会话中获得ShoppingCart
实例并将其转换为CartItems
的列表,因此我怀疑ShoppingCart
和CartItems
是相同的对象:)