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

C# 忽略BinaryFormatter序列化中的非序列化属性,c#,asp.net-mvc,entity-framework,serialization,C#,Asp.net Mvc,Entity Framework,Serialization,我有一个名为User的类,它是[Serializable]并从基类IdentityUser继承的实体框架类,不可序列化 我在Booking类中有一个类型为User的属性,Booking类是Serializable我正在尝试使用BinaryFormatter序列化Booking对象,但由于IdentityUser类的原因,我无法序列化该对象,我得到以下错误: 在中键入“Microsoft.AspNet.Identity.EntityFramework.IdentityUser” 程序集“Micro

我有一个名为
User
的类,它是
[Serializable]
并从基类
IdentityUser
继承的实体框架类,不可序列化

我在
Booking
类中有一个类型为
User
的属性,
Booking
类是
Serializable
我正在尝试使用
BinaryFormatter
序列化Booking对象,但由于
IdentityUser
类的原因,我无法序列化该对象,我得到以下错误:

在中键入“Microsoft.AspNet.Identity.EntityFramework.IdentityUser” 程序集“Microsoft.AspNet.Identity.EntityFramework,版本=2.0.0.0, 区域性=中性,PublicKeyToken=31bf3856ad364e35'未标记为 可序列化。”

有没有一种方法可以忽略此属性,因为我认为没有办法将“IdentityUser”设置为可序列化

[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; }
}

BinaryFormatter
序列化对象的属性,而不是属性。对于一个实例,秘密支持字段是实际序列化的内容

通常,如果不想序列化字段,可以应用该属性,
BinaryFormatter
将跳过该属性。在c#7.3及更高版本中,可以通过使用字段目标属性对自动实现属性的秘密支持字段执行此操作:

    [field: NonSerialized]
    public virtual User Guest { set; get; }
见:和

在c#7.3之前,无法将属性应用于自动实现属性的支持字段。因此,您需要使支持字段显式:

[Serializable]
public class Booking
{
    [ForeignKey("Guest")]
    public string GuestId { set; get; }

    [NonSerialized]
    User guest;

    public virtual User Guest { set { guest = value; } get { return guest; } }
}

顺便说一下,如果需要在代码< >用户< /代码>中序列化一些信息,可以考虑用.</P>实现、或替换“代码>用户< /代码>的实例”。