【发布时间】:2025-12-27 07:55:16
【问题描述】:
为了简单起见,我将使用水果来展示我的示例代码。实际上,我正在做一些更有意义的事情(我们希望如此)。假设我们有一个枚举:
public enum FruitType
{
Apple,
Orange,
Banana
}
还有一个班级:
[Serializable]
public class Fruit
{
public FruitType FruitType { get; set; }
public Fruit(FruitType type)
{
this.FruitType = type;
}
}
我们可以对其进行序列化和反序列化。现在,让我们修改枚举,使其成为现在:
public enum FruitType
{
GreenApple,
RedApple,
Orange,
Banana
}
当反序列化先前序列化的对象时,您会收到 System.InvalidOperation 异常,因为 Apple(原始枚举项)无效。该对象不会被反序列化。
我能够解决此问题的一种方法是在序列化时为Fruit 类中的FruitType 属性指定一个不同的名称,如下所示:
[XmlElement(ElementName = "Mode")]
public FruitType FruitType { get; set; }
现在,在反序列化过程中,旧属性会因为找不到而被忽略。我想知道是否有办法在反序列化期间忽略/跳过无效的枚举项,这样就不会引发异常并且对象仍然会被反序列化。
【问题讨论】:
-
查看我对包含工作示例项目的链接问题的回答:*.com/a/10709040
标签: c# serialization xml-serialization deserialization xml-deserialization