下午好,我正在使用实体框架。我应用了数据库优先方法,EF 从测试、图片、问题、答案数据库中的表创建了实体。

课堂测试:
[XmlRoot(ElementName = "Test")]
public partial class Test
{
public Test()
{
Questions = new HashSet<Question>();
}
[XmlIgnoreAttribute]
public int ID { get; set; }
public string Name { get; set; }
public string Theory { get; set; }
public bool IsShowTheory { get; set; }
public string URLonTheory { get; set; }
public System.DateTime Date { get; set; }
public int CountRandomQuestion { get; set; }
public int CountCorrectAnswers { get; set; }
public Nullable<int> PictureForTheory { get; set; }
public System.Guid GUID { get; set; }
[XmlIgnoreAttribute]
public virtual Picture Picture { get; set; }
[XmlArray("Questions"), XmlArrayItem("Question")]
public virtual ICollection<Question> Questions { get; set; }
}
班级图片:
[XmlRoot(ElementName = "Picture")]
public partial class Picture
{
public Picture()
{
this.Tests = new HashSet<Test>();
}
[XmlIgnore]
public int Id { get; set; }
public byte[] Picture1 { get; set; }
[XmlIgnore]
public virtual ICollection<Test> Tests { get; set; }
}
课堂问题
[XmlRoot(ElementName = "Question")]
public partial class Question
{
[XmlIgnore]
public int ID { get; set; }
public int Test { get; set; }
public string Text { get; set; }
[XmlIgnore]
public virtual ICollection<Answer> Answers { get; set; }
[XmlIgnore]
public virtual Test Test1 { get; set; }
public Question()
{
this.Answers = new HashSet<Answer>();
}
}
课堂答案
[XmlRoot(ElementName = "Answer")]
public partial class Answer
{
[XmlIgnoreAttribute]
public int Id { get; set; }
public int QuestionID { get; set; }
public string Text { get; set; }
public bool IsTrue { get; set; }
public virtual Question Question { get; set; }
private Answer()
{
}
}
我需要将测试类和所有相关类序列化到一个 xml 文件中。试图这样做:
private static void SerializeTest(Test test, string path)
{
XmlSerializer xmlFormat = new XmlSerializer(typeof(Test),
new Type[] {typeof(Picture) , typeof(Question), typeof(Answer)});
using (Stream fStream = new FileStream(path,
FileMode.Create, FileAccess.Write, FileShare.None))
{
xmlFormat.Serialize(fStream, test);
}
}
尝试序列化时,抛出异常并显示消息
无法序列化 System.Collections.Generic.ICollection`1[[TestSystem.Question, TestSystem, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] 类型的成员 TestSystem.Test.Questions,因为它是一个接口。
如何正确序列化 EF 生成的类?提前致谢!
简而言之,您需要使用中间类将它们序列化,以便在应用程序层之间或应用程序之间传输。
这些类,即所谓的 DTO(数据传输对象)类,不包含虚拟属性或任何逻辑,仅用于传输。
Sharp 有一个实现这个原则的 POCO 方法,似乎甚至可以生成这些类,你可以在这里阅读更多,并且在ru.stackoverflow上已经有很多关于 DTO 和 POCO 的有用信息