C# DataContractSerializer不适用于MVC DBContext对象
我试图将实现DbContext的对象写入一个文件,但是在让DataContractSerializer工作时遇到了问题。我在看这篇关于这个主题的文章,但我发现了一个错误:C# DataContractSerializer不适用于MVC DBContext对象,c#,asp.net-mvc,serialization,C#,Asp.net Mvc,Serialization,我试图将实现DbContext的对象写入一个文件,但是在让DataContractSerializer工作时遇到了问题。我在看这篇关于这个主题的文章,但我发现了一个错误: 错误10“System.Runtime.Serialization.DataContractSerializer”不包含“Serialize”的定义,并且找不到接受“System.Runtime.Serialization.DataContractSerializer”类型的第一个参数的扩展方法“Serialize”(是否缺少
错误10“System.Runtime.Serialization.DataContractSerializer”不包含“Serialize”的定义,并且找不到接受“System.Runtime.Serialization.DataContractSerializer”类型的第一个参数的扩展方法“Serialize”(是否缺少using指令或程序集引用?
我的班级情况如下:
public class ManagementDbContext : DbContext
{
public DbSet<RemoteHost> RemoteHosts {get;set;}
public DbSet<DataSource> DataSources { get; set; }
public override int SaveChanges()
{
using (FileStream fs = File.OpenWrite("ManagementData.xml"))
{
XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(fs, Encoding.UTF8);
DataContractSerializer srlz = new DataContractSerializer(typeof(ManagementDbContext));
srlz.Serialize(writer, this);
writer.Close(); // ensure it's properly flushed
}
return base.SaveChanges();
}
}
公共类ManagementDbContext:DbContext
{
公共数据库集远程主机{get;set;}
公共数据库集数据源{get;set;}
公共覆盖int SaveChanges()
{
使用(FileStream fs=File.OpenWrite(“ManagementData.xml”))
{
XmlDictionaryWriter-writer=XmlDictionaryWriter.CreateTextWriter(fs,Encoding.UTF8);
DataContractSerializer srlz=新的DataContractSerializer(typeof(ManagementDbContext));
srlz.Serialize(writer,this);
writer.Close();//确保已正确刷新
}
返回base.SaveChanges();
}
}
编辑:
好的,结果证明我所遵循的示例代码是错误的,我有错误。行srlz.Serialize(writer,this)
应该是srlz.WriteObject(writer,this)
如图所示
此外,我无法序列化DbContext的实现,并且在类上缺少[Serializable]和[DataContract]属性,在成员上缺少[DataMember()。首先,您需要在ManagementDbContext中使用and属性。第二步,您无法序列化对象,因为它没有标记任何属性
所以我不能序列化我的对象?我怎样才能将其写入文件中呢?@judgeja我只能创建一个简单的对象,例如SimpleDbContext,它具有相同的属性、标记的属性,并且没有从另一个对象继承。并将ManagementDbContext复制到SimpleDbContext。尝试了此操作,但仍然存在相同的问题。。你可以看到新的班级above@judgeja像RemoteHost和DataSource这样的所有类也必须被标记为属性。当你说也被标记为属性时,你的意思是有[DataContract]和[Serializable]属性吗?是的。