0

DbContextを実装するオブジェクトをファイルに書き込もうとしていますが、DataContractSerializerを機能させるのに問題があります。http://www.riggshill.com/home/node/24という件名でこの投稿を見ていましたが、エラーが発生しました。

Error 10 'System.Runtime.Serialization.DataContractSerializer' does not contain a definition for 'Serialize' and no extension method 'Serialize' accepting a first argument of type 'System.Runtime.Serialization.DataContractSerializer' could be found (are you missing a using directive or an assembly reference?)

私のクラスは次のようになります。

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();
    }
}

編集:

さて、私がフォローしていたサンプルコードは悪く、間違いがあったことがわかりました。この行は 、ここに示すようにsrlz.Serialize(writer,this)なっているはずです。DataContractSerializer また、DbContextの実装をシリアル化できず、クラスの[Serializable]属性と[DataContract]属性、およびDaniilが指摘したメンバーの[DataMember()]がありませんでした。srlz.WriteObject(writer,this)

4

1 に答える 1

1

最初に、ManagementDbContextでSerializable属性とDataContract属性を使用する必要があります。次に、 DbContextに属性がマークされていないため、オブジェクトをシリアル化できません。

シリアル化の基本的なクイズ

于 2013-03-25T10:55:47.730 に答える