gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:15:50 24 4
gpt4 key购买 nike

我有一个名为 User 的类,它是 [Serializable] 并且继承自基类 IdentityUser 一个 Entity Framework 类和 Non Serializable。

我在 Booking 类中有一个属性,类型为 User 并且 Booking 类是 Serializable 我正在尝试使用 BinaryFormatter 序列化预订对象,但我不能因为 IdentityUser 类而出现此错误:

'Type 'Microsoft.AspNet.Identity.EntityFramework.IdentityUser' in Assembly 'Microsoft.AspNet.Identity.EntityFramework, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' is not marked as serializable.'

有没有一种方法可以忽略此属性,因为我认为没有办法将“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 序列化 public and private fields一个对象——不是属性。对于 auto-implemented property secret 支持字段是实际序列化的内容。

通常情况下,如果你不想一个字段被序列化,你可以应用[NonSerialized]属性,BinaryFormatter 将跳过它。在 c# 7.3 及更高版本中,可以通过使用字段目标属性对自动实现属性的 secret 支持字段执行此操作:

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

参见:Auto-Implemented Property Field-Targeted AttributesWhat's new in C# 7.3 .

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

顺便说一句,如果您需要序列化User中的一些信息,您可以考虑实现ISerializable。 ,或用 serialization surrogates 替换 User 的实例.

关于c# - 忽略 BinaryFormatter 序列化中的非序列化属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33489930/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com