在C#中生成xml文档时出错

时间:2014-01-11 13:49:46

标签: c# xml

我正在尝试使用C#进行一些序列化,但它会抛出一个例外there was an error generating the xml document。这是我进行序列化的地方:

 public void serialize()
    {
        try
        {
            XmlSerializer ser = new XmlSerializer(typeof(Repository<Student>));
            StreamWriter myWriter = new StreamWriter("stud.xml");
            ser.Serialize(myWriter, rep);
            myWriter.Close();
        }
        catch (Exception e)
        {
            Console.WriteLine("Error " + e.Message);
        }     

    }

这是我要序列化的类:

 public class Repository<T> : MyStack<T>
{
    public int size;
    public int capacity;
    public SLL<T> stud;

    public Repository()
    {
        /*
         * Creator for class Repository.
         */
        this.stud = new SLL<T>();
        this.capacity = 20;
        this.size = 0;
    }

其中MyStack是一个接口,而SSL<T>是我已经实现的单链接列表。

4 个答案:

答案 0 :(得分:2)

请添加例外的完整详细信息以隔离问题。从您发布的代码中,您的类看起来不可序列化。

Repository,MyStack,SSL可序列化类(您是否对将要序列化的所有成员类型都有[Serializable]属性?)

答案 1 :(得分:2)

序列化存储库类看起来很奇怪。相反,我会序列化SLL<T>对象,因为这是您感兴趣的实际数据。存储库只是获取数据的包装对象,因此没有理由将其序列化。

正如Cosmin所提到的,请务必在[Serializable]上放置SLL<>属性

[Serializable]
public class SLL<T>
{
}

答案 2 :(得分:1)

以下是如何序列化的示例。我想你可能会错过一些重要的部分:

[Serializable]
public class User
{
    [XmlElement("login")]
    [Key]
    public string login { get; set; }

    [XmlElement("KDP")]
    public int KDP { get; set; }

    [XmlElement("attended")]
    public int attended { get; set; }
   etc.
如果您计划反序列化,那么公众的吸气者和制定者是非常重要的。 以下是如何序列化这些列表的示例:

    [XmlArrayItem(typeof(User))]
    [XmlElement("usersList")]
    public static List<User> usersList = new List<User>();

        using (StreamWriter myWriter = new StreamWriter(usersPath, false))
        {
            userSerializer.Serialize(myWriter, usersList);
            myWriter.Close();
        }
希望它有所帮助。

答案 3 :(得分:1)

属性使用 [XmlIgnore] 属性,这会导致生成xml文档时出错,以便可以解析其他内容。