Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用XmlSerializer时,是否可以将标志枚举值标记为过时?_C#_Xml_Xmlserializer - Fatal编程技术网

C# 使用XmlSerializer时,是否可以将标志枚举值标记为过时?

C# 使用XmlSerializer时,是否可以将标志枚举值标记为过时?,c#,xml,xmlserializer,C#,Xml,Xmlserializer,我见过这个[问题][1],它指的是[过时(“…”),听起来像是我可能需要使用的东西。但现在我想我不行了 我有一个更新的标志枚举: [Flags] [Guid("xxxxx")] [ComVisible(true)] public enum AssignmentType { None = 0, Attendant = 1, ConductorCBS = 2, ReaderCBS = 4, Chairman = 8, Mike =

我见过这个[问题][1],它指的是
[过时(“…”)
,听起来像是我可能需要使用的东西。但现在我想我不行了

我有一个更新的标志枚举:

[Flags]
[Guid("xxxxx")]
[ComVisible(true)]
public enum AssignmentType
{
    None = 0,
    Attendant = 1,
    ConductorCBS = 2,
    ReaderCBS = 4,
    Chairman = 8,
    Mike = 16,
    PlatformAttendant = 32,
    Prayer = 64,
    OCLM = 128,
    Sound = 256,
    Student = 512,
    Custom = 1024,
    Demonstration = 2048,
    Assistant = 4096,
    Host = 8192,
    CoHost = 16384,
    OCLMTreasures = 32768,
    OCLMGems = 65536,
    OCLMLiving = 131072
}
为了给您提供一些上下文,这些标志枚举出现在我的XML文件中,如下所示:

      <Assignments Attendant="false" ConductorCBS="false" ReaderCBS="false" Chairman="false" Microphones="false" PlatformAttendant="false" Prayer="false" OCLM="false" Sound="false" Student="false" Assistant="false" Host="false" CoHost="false" OCLMTreasures="false" OCLMGems="true" OCLMLiving="false" Demonstrations="false">
所以,我想能够读懂它,但我不想写出来。那么,在这里使用
[过时…]
语法是否可以接受?
[1] :

最后,这就是我所需要的:


    [Obsolete("Use the OCLMTreasures, OCLMGems and OCLMLiving flag values instead.")]
    [XmlAttribute("OCLM")]
    public bool UseForOCLMAssignments
    {
        get => _Assignments.HasFlag(AssignmentType.OCLM); set
        {
            if (value)
                _Assignments |= AssignmentType.OCLM;
            else
                _Assignments &= ~AssignmentType.OCLM;
        }
    }


因此,
过时的
关键字毕竟是一种方法。

序列化方法只需要获取类中的内容并转换为Xml。因此,如果有人在类中放入过时的值,您希望序列化程序做什么?它确实应该在向类添加数据的代码中修复。如果类中已经存在值,我想您希望输出为xml。@jdweng我的软件管理这个xml文件。在这个版本之前,我一直在使用那个标志。现在,向前看,我使用了三个新标志。但是我必须将枚举作为有效条目保存,否则解析器不会崩溃吗?理想情况下,我会删除这个标志,然后当我读入XML时,如果它遇到这个“未知”OCLM属性,它会将其他三个属性设置为true。但是我不知道使用
XmlSerializer
是否可以这样做。您可以在类中创建一个自定义get/set,然后在get/set中添加代码。看下面:@jdweng我真的不明白。我已经按照我向您展示的方式定义了我的对象。
   [XmlAttribute("OCLM")]
    public bool UseForOCLMAssignments
    {
        get => _Assignments.HasFlag(AssignmentType.OCLM); set
        {
            if (value)
                _Assignments |= AssignmentType.OCLM;
            else
                _Assignments &= ~AssignmentType.OCLM;
        }
    }

    [Obsolete("Use the OCLMTreasures, OCLMGems and OCLMLiving flag values instead.")]
    [XmlAttribute("OCLM")]
    public bool UseForOCLMAssignments
    {
        get => _Assignments.HasFlag(AssignmentType.OCLM); set
        {
            if (value)
                _Assignments |= AssignmentType.OCLM;
            else
                _Assignments &= ~AssignmentType.OCLM;
        }
    }