忽略BinaryFormatter序列化中的非序列化属性

kar*_*tal 5 c# asp.net-mvc serialization entity-framework

我有一个被调用的类User,它是[Serializable]从基类继承IdentityUser的Entity Framework类和Non Serializable.

我在Booking类中有一个属性类UserBooking类是Serializable我试图序列化预订对象使用BinaryFormatter 但我不能因为IdentityUser类而我得到这个错误:

在程序集'Microsoft.AspNet.Identity.EntityFramework,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'中'输入'Microsoft.AspNet.Identity.EntityFramework.IdentityUser'未标记为可序列化.

有没有办法忽略这个属性,因为我认为没有把'IdentityUser'作为Serializable.

[Serializable]
public class User : IdentityUser
{
   public String FirstName { get; set; }
}

[Serializable]
public class Booking
{
   [ForeignKey("Guest")]
   public string GuestId { set; get; }
   public virtual User Guest { set; get; }
}
Run Code Online (Sandbox Code Playgroud)

dbc*_*dbc 14

BinaryFormatter序列化对象的公共和私有字段 - 而不是属性.对于自动实现的属性,秘密支持字段是实际序列化的.

通常,如果您不希望序列化字段,则可以应用该[NonSerialized]属性,BinaryFormatter并将跳过该属性.但是,无法将该属性应用于自动实现的属性的秘密支持字段.因此,您需要使支持字段显式:

    [field: NonSerialized]
    public virtual User Guest { set; get; }
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果你需要在一些序列的信息User,你可以考虑实现ISerializable,或更换的情况下,User系列化的代理人.