我正在尝试使用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>
是我已经实现的单链接列表。
答案 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文档时出错,以便可以解析其他内容。