我在以下代码中收到 SerializationException: (...) is not marked as serializable.
错误:
[Serializable]
public class Wind
{
public MyText text;
public Size MSize;
public Point MLocation;
public int MNumber;
/.../
}
[Serializable]
public class MyText
{
public string MString;
public Font MFont;
public StringFormat StrFormat;
public float MySize;
public Color FColor, SColor, TColor;
public bool IsRequest;
public decimal MWide;
/.../
}
和要序列化的列表:
List<Wind> MyList = new List<Wind>();
代码片段:
FileStream FS = new FileStream(AppDomain.CurrentDomain.BaseDirectory +
"Sticks.dat", FileMode.Create);
BinaryFormatter BF = new BinaryFormatter();
BF.Serialize(FS, MyList);
FS.Close();
抛出异常:
System.Runtime.Serialization.SerializationException was unhandled
Message="Type 'System.Drawing.StringFormat' in Assembly 'System.Drawing,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not
marked as serializable."
我该如何解决这个问题?
最佳答案
使用 BinaryFormatter
,您可以通过将字段标记为 [NonSerialized]
来排除该字段,但这样您将得不到数据。您可以使用自定义序列化 (ISerializable
),但这很难。
就个人而言,我会使用不同的序列化程序;特别是 DataContractSerializer
或 protobuf-net,它们中的任何一个都允许您创建一个second 属性以用于序列化,编写您自己的代码以将其表示为更简单的东西(一个字符串,也许)。
关于c# - 在 C# 中处理序列化异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1497659/