C# 不带默认值的枚举的XML序列化

C# 不带默认值的枚举的XML序列化,c#,enums,xml-serialization,C#,Enums,Xml Serialization,我有一个枚举: [DataContract] public enum Relationship { Spouse = 4, ResidesWith = 1, Parent = 2, Other = 3, PersonalGuarantor = 5, CoApplicant = 6 } 如您所见,零没有定义。我构建程序的想法是,枚举中永远不会定义零。这使我能够看到哪些已从各种组合框中设置,哪些已设置为空值。如果我把零设为空值,就没有办法区分这两件事

我有一个枚举:

[DataContract]
public enum Relationship
{
    Spouse = 4,
    ResidesWith = 1,
    Parent = 2,
    Other = 3,
    PersonalGuarantor = 5,
    CoApplicant = 6
}
如您所见,零没有定义。我构建程序的想法是,枚举中永远不会定义零。这使我能够看到哪些已从各种组合框中设置,哪些已设置为空值。如果我把零设为空值,就没有办法区分这两件事,我必须能够做到这一点

由于缺少默认状态,我在尝试序列化值时出错


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

您需要使用0作为枚举值-将其设置为无效的值,并按实际情况进行检查

[DataContract]
public enum Relationship
{
    Invalid = 0,
    Spouse = 4,
    ResidesWith = 1,
    Parent = 2,
    Other = 3,
    PersonalGuarantor = 5,
    CoApplicant = 6
}
不要忘记枚举是基于一个整数类型,即它们的基类型,因此它们总是有一个值。值类型不能为null,默认为0。明确这一点也将使代码库中的内容更加清晰


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

您需要使用0作为枚举值-将其设置为无效值,并按现有状态进行检查

[DataContract]
public enum Relationship
{
    Invalid = 0,
    Spouse = 4,
    ResidesWith = 1,
    Parent = 2,
    Other = 3,
    PersonalGuarantor = 5,
    CoApplicant = 6
}
不要忘记枚举是基于一个整数类型,即它们的基类型,因此它们总是有一个值。值类型不能为null,默认为0。明确这一点也将使代码库中的内容更加清晰


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

您得到的确切错误是什么?是因为某些字段具有未命名的关系值吗?可能是“0”不是关系或类似类型的FamilyMemberRelationship的有效选项。当我按照Oded的建议输入默认值时,一切都解决了。我能够对我的程序做一些小的修改,以防止它在其他地方弄乱东西。你得到的确切错误是什么?是因为某些字段具有未命名的关系值吗?可能是“0”不是关系或类似类型的FamilyMemberRelationship的有效选项。当我按照Oded的建议输入默认值时,一切都解决了。我能够对我的程序进行一些小的更改,以防止它在其他地方弄乱东西。值得注意的是,所有枚举都为零值是。值得注意的是,所有枚举都为零值是。