没有默认值的枚举的XML序列化

Nat*_*ist 1 c# enums xml-serialization

我有一个枚举:

[DataContract]
public enum Relationship
{
    Spouse = 4,
    ResidesWith = 1,
    Parent = 2,
    Other = 3,
    PersonalGuarantor = 5,
    CoApplicant = 6
}
Run Code Online (Sandbox Code Playgroud)

如您所见,零未定义.我构建了我的程序,认为永远不会在枚举中定义零.这允许我看到哪些已经从各种组合框设置,哪些被设置为空值.如果我将零设置为空值,则无法区分这两个事物,而且我必须能够这样做.

由于缺少默认状态,当我尝试序列化值时出现错误.

有没有办法让我的xml序列化跳过没有值的枚举,或者避免这些错误的方法?我真的不想引入默认值.

Ode*_*ded 6

您需要使用0作为枚举值 - 使其成为无效的值并且您检查(因为您已经).

[DataContract]
public enum Relationship
{
    Invalid = 0,
    Spouse = 4,
    ResidesWith = 1,
    Parent = 2,
    Other = 3,
    PersonalGuarantor = 5,
    CoApplicant = 6
}
Run Code Online (Sandbox Code Playgroud)

不要忘记枚举是基于整数类型(它们的基类型),因此它们将始终具有值(值类型不能为null)并且默认为0.明确一点也会使代码库中的内容更加清晰.

Protip:您也可以在枚举中使用负值.