class 序列化期间出错:类型未标记为可序列化

Error during class serialization: type is not marked serializable

我有一个 class 标记为 [Serializable]。它有一个 属性 tha 我不想序列化。 但是在运行时我在序列化过程中遇到了错误。 这些是我的 classes:

public interface IMyNonSerializable
{
   ...
}
public class MyNonSerializable : IMyNonSerializable
{
   ...
}
[Serializable]
public class MySerializable
{
   public string MyProp1{get;set;}
   [NonSerialized]
   public string MyProp2{get;set;}
   public IMyNonSerializable MyNonSerializableProp{get;set;}
}

这是我用来序列化我的 MySerializable 的代码 class:

    Stream stream = new MemoryStream();
    BinaryFormatter formatter = new BinaryFormatter();
    formatter.Context = new StreamingContext(StreamingContextStates.Clone);
    formatter.Serialize(stream, obj);

在运行时我得到这个错误:

> System.Runtime.Serialization.SerializationException
  HResult=0x8013150C
  Message=Type 'MyNonSerializable' is not marked as serializable.
  Source=mscorlib

有没有办法在不实现 ISerializable 接口的情况下序列化我的 class 避免序列化我的不可序列化 class?

创建支持字段并将 [NonSerialized] 属性应用于此:

[Serializable]
public class MySerializable
{
    public string MyProp1 { get; set; }
    public string MyProp2 { get; set; }

    [NonSerialized]
    private IMyNonSerializable _myNonSerializableProp;
    public IMyNonSerializable MyNonSerializableProp
    {
        get { return _myNonSerializableProp; }
        set { _myNonSerializableProp = value; }
    }
}

如果您使用的是 C# 7.3 或更高版本,则可以在自动生成的 属性 上使用字段目标属性,而无需创建支持字段:

[field: NonSerialized]
public IMyNonSerializable MyNonSerializableProp { get; set; }