2015-11-03 177 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

相關問題