2015-11-03 174 views
2

我有一个类User,它是[Serializable]并且从基类IdentityUser继承了一个Entity Framework类和Non Serializable。忽略BinaryFormatter序列化中的非序列化属性

我有Booking类中的属性与User类型和BookingSerializable我试图使用序列化的BinaryFormatter预订对象,但我不能,因为IdentityUser类的,我得到这个错误:

'输入'Microsoft.AspNet.Identity.EntityFramework.IdentityUser'in Assembly'Microsoft.AspNet.Identity.EntityFramework,Version = 2.0.0.0, Culture = neutral,PublicKeyToken = 31bf3856ad364e35'未标记为 serializable。'

有没有办法忽略这个属性,因为我认为没有必要将'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; } 
} 

回答

3

BinaryFormatter串行化一个对象的public and private fields - 而不是性能。对于auto-implemented property秘密支持字段是实际序列化的字段。

通常情况下,如果你不想要一个字段被序列化,你可以应用[NonSerialized]属性,而BinaryFormatter会跳过它。但是,无法将该属性应用于自动实现的属性的秘密支持字段。因此,你需要做后盾场是明确的:

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

    [NonSerialized] 
    User guest; 

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

顺便说一句,如果你需要一些序列的信息User,你可以考虑实施ISerializable,或serialization surrogates更换的User实例。

+0

目前工作完美...谢谢 – kartal

相关问题