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

时间:2013-04-22 00:35:11

标签: c# casting xmlwriter

我正在进行一项任务,我需要从会话中创建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>";
    }
}

1 个答案:

答案 0 :(得分:1)

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

您似乎正在尝试从ShoppingCart检索项目列表。由于您已经有了实例(在第一次调用Session时),您只需要访问包含购物车中商品列表的属性(如果有的话),如下所示:

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

List<CartItem> cartItems = sCart.Items;

以上内容基于ShoppingCart,其中包含名为Items的属性,该属性返回CartItem的列表。

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