我正在进行一项任务,我需要从会话中创建XML文件。我有一个投射问题,我知道它来自列表,这是存储在购物车中的项目,但我不知道如何解决它。
按钮单击是一个Create 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>";
}
}
答案 0 :(得分:1)
这只是猜测,但正如我在上面的评论中所说,看起来你第一次调用Session并没有创建错误(你从Session获得ShoppingCart
实例)。
您似乎正在尝试从ShoppingCart
检索项目列表。由于您已经有了实例(在第一次调用Session时),您只需要访问包含购物车中商品列表的属性(如果有的话),如下所示:
ShoppingCart sCart = (ShoppingCart)Session["UserCart"];
List<CartItem> cartItems = sCart.Items;
以上内容基于ShoppingCart
,其中包含名为Items
的属性,该属性返回CartItem
的列表。
你这样做的方式是告诉编译器从Session获取ShoppingCart
实例并将其转换为CartItems
的列表,因此我怀疑ShoppingCart
和CartItems
是同一个对象:)