簡體   English   中英

C# 保存到 XML 文檔

[英]C# Saving into an XML document

我嘗試將對象保存到 XML 文檔。 我總是得到一個內部異常錯誤。 我認為它必須與裝箱和拆箱有關,但我無法幫助自己。

所以我們開始:

XML保存方法

public class Saveclass
//
        public static void Save(string filename, List<Class> classlist)
        {

            StreamWriter writer = new StreamWriter(filename, false, Encoding.UTF8);
            XmlSerializer serializer = new XmlSerializer(typeof(class));
            serializer.Serialize(writer,classlist);//Here i get the error at classlist
            writer.Close();
        }

這里是 SaveFile 對話框

private void SaveButton(object sender, EventArgs e)
        {
            SaveFileDialog dialog = new SaveFileDialog();

            dialog.Filter = "XML Data|*.xml";
            if (dialog.ShowDialog() == DialogResult.OK)
            {
                List<class> classlist = null;
                foreach (ListViewItem item in this.listViewWinforms.Items)
                {
                    classlist = new List<class>();
                }
                Saveclass.Save(dialog.FileName, classlist)
            }
        }

在 Basic 中,我有一個包含項目的列表視圖,我想將這些項目保存在我的列表視圖中到一個 XML 文檔錯誤是

System.InvalidOperationException: '嘗試生成 XML 文檔

InvalidCastException:類型“System.Collections.Generic.List`1 [Namespace.Class]”的對象無法轉換為“Namespace.Class”

類型不匹配。

您將序列化程序定義為:

new XmlSerializer(typeof(class));

它被配置為序列化class類型的對象。

但是,您隨后嘗試序列化類classlist對象,該對象不是class而是List<Class>

嘗試將序列化程序定義為:

new XmlSerializer(typeof(List<Class>));

順便說一下,命名你的類class是非常混亂的。 您應該嘗試更具描述性地命名您的類。

我認為您只需要更改一行:

只需使用 typeof(List) 而不是 typeof(class))

XmlSerializer serializer = new XmlSerializer(typeof(List<Class>));

這是一個小例子

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
using System.IO;

namespace ConsoleApplication1
{
    public class Program
    {
        public static void Main(string[] args)
        {
            List<Car> myList = new List<Car>();
            myList.Add(new Car(){ Name = "Beetle", Brand = "VW", Price = 5999.9M });
            myList.Add(new Car(){ Name = "Corolla", Brand = "Toyota", Price = 49999.9M });

            Saveclass.Save("carlist.xml",myList);
        }
    }

    public static class Saveclass
    {
        public static void Save(string filename, List<Car> classlist)
        {
            StreamWriter writer = new StreamWriter(filename, false, Encoding.UTF8);
            XmlSerializer serializer = new XmlSerializer(typeof(List<Car>));
            serializer.Serialize(writer,classlist);
            writer.Close();
        }
    }

    public class Car
    {
      public string Name  {get;set;}
      public string Brand  {get; set;}
      public decimal Price {get; set;}
    }
}

你可以在這里測試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM