2013-04-22 2 views
0

Я работаю над назначением, где мне нужно создать XML-файл из сеанса. У меня проблема с кастингом, и я знаю, что это происходит из списка, где хранятся предметы в корзине, но я не уверен, как это исправить.Невозможно передать объект при создании файла XML из сеанса

Кнопка click - это кнопка 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

Как определяется 'Session [index]'? –

+0

Где находится 'ShoppingCart'? – nmat

+1

У вас есть 'ShoppingCart sCart = (ShoppingCart) Session [" UserCart "];', который не выдает ошибку, а затем у вас есть 'cartItems = (Список ) Сессия [" UserCart "];', которая бросает ошибка. Это говорит мне, что 'Session [" UserCart "]' является экземпляром 'ShoppingCart'. Возможно, вам нужно что-то вроде 'cartItems = ((ShoppingCart) Session [" UserCart "]). Items;' или какое бы то ни было свойство для списка элементов в 'ShoppingCart'. – Tim

ответ

1

Это только предположение, но, как я положил на мой комментарий выше, это выглядит, как ваш первый призыв к сессии не создает ошибку (где вы получите экземпляр ShoppingCart из сессии).

Похоже, вы пытаетесь получить список предметов из ShoppingCart. Поскольку у вас уже есть экземпляр (в вашем первом обращении к сессии), все, что вам нужно сделать, это получить доступ к собственности (если таковой имеется), который содержит список товаров в корзине, как это:

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

List<CartItem> cartItems = sCart.Items; 

Вышеуказанное основано на ShoppingCart, имеющем свойство Items, которое возвращает список из CartItem.

, как вы делали это вы говорили компилятор, чтобы получить экземпляр ShoppingCart от сессии и преобразовать его в Список CartItems, следовательно, ошибка, как я сомневаюсь ShoppingCart и CartItems такие же объект :)

+0

Омг, ты потрясающий! Это именно то, что было. Теперь XML пишет. Спасибо большое! – newbie1

+0

Добро пожаловать. Счастливое программирование! – Tim