none
EnumMember RRS feed

  • Question

  • Bonjour,

    me revoici avec mes enums.

    J'ai le problème suivant :

     

    There was an error while trying to serialize parameter net.pipe://service:myobject. The InnerException message was 'Enum 
    value 'C, D' is invalid for type 'MonEnum' and cannot be serialized. Ensure that the necessary enum values are present and are marked
    with EnumMemberAttribute attribute if the type has DataContractAttribute attribute.'. Please see InnerException for more details.

     

    Voici l'enum en question :

     

    [Flags]
        [DataContract]
        public enum MonEnum
        {
            [EnumMember]
            A= 0x0000,
            [EnumMember]
            B =	 0x0001,
            [EnumMember]
            C = 0x1FFF,
            [EnumMember]
            D = 0x8000,
            [EnumMember]
            E	=	0x0004,
            [EnumMember]
            F		=	0x0008	 
        }

     


    J'avoue ne pas savoir quoi faire au vu de l'erreur et du code.

    Merci par avance pour vos réponses.

     



    mercredi 14 septembre 2011 16:32

Réponses

  • Bonjour,

    En lisant la doc il est écrit :

    Note that to use a flag enumeration, the progression must be an uninterrupted sequence of powers of 2 (for example, 1, 2, 4, 8, 16, 32, 64).

    Pouvez-vous nous montrer l'énumération qui semble maintenant fonctionner ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    jeudi 15 septembre 2011 19:56
    Modérateur

Toutes les réponses

  • Bonjour,

    Pouvez-vous nous montrer le code de l'objet (monObjet) qui contient la propriété avec l'énumération ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    mercredi 14 septembre 2011 19:53
    Modérateur
  • [DataContract]
        public class MaClass
        {
    
            [DataMember]
            public MonEnum unEnum
            {
                get { return val; }
                set
                {
                    if (val != value)
                    {
                        val = value;
                        OnPropertyChanged(new CStringEventArgs("val"));
                    }
                }
            }
    

    Voici le bout de code en question

    jeudi 15 septembre 2011 07:07
  • Visiblement lorsque l'attribut Flags est utilisé il est inutile d'avoir l'attribut DataContract.

    Enumeration types. Enumerations, including flag enumerations, are serializable. Optionally, enumeration types can be marked with the DataContractAttribute attribute, in which case every member that participates in serialization must be marked with the EnumMemberAttribute attribute. Members that are not marked are not serialized. For more information, see Enumeration Types in Data Contracts.

    J'ai pourtant la même erreur.

    Je vais regarder si cela ne viendrait pas de l'évènement lancé dans la propriété.

    jeudi 15 septembre 2011 07:22
  • Est-ce-que ce genre de nom MASK_ALL_EXCEPT_8_SUB contenant un chiffre, pourrait faire planter la serialization ? Lorsque je le mets à la fin de l' enum, je n'ai plus de problème.
    jeudi 15 septembre 2011 09:16
  • Bonjour,

    En lisant la doc il est écrit :

    Note that to use a flag enumeration, the progression must be an uninterrupted sequence of powers of 2 (for example, 1, 2, 4, 8, 16, 32, 64).

    Pouvez-vous nous montrer l'énumération qui semble maintenant fonctionner ?

    Cordialement


    Gilles TOURREAU - MVP C#
    Architecte .NET/Consultant/Formateur chez Winwise
    Blog : http://gilles.tourreau.fr
    - MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5
    - MCITP : SQL Server 2008 Developper
    - MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5
    jeudi 15 septembre 2011 19:56
    Modérateur
  • Au vu de ce code

    [Flags]
        [DataContract]
        public enum MonEnum
        {
            [EnumMember]
            A= 0x0000,
            [EnumMember]
            B =	 0x0001,
            [EnumMember]
            C = 0x1FFF,
            [EnumMember]
            D = 0x8000,
            [EnumMember]
            E	=	0x0004,
            [EnumMember]
            F		=	0x0008	 
        }

    On peut constater que les puissances de 2 ne sont pas respecté, se serait donc ça qui n'irait pas! Merci j'avais pas vu cette partie dans la documentation. Je vais tester =)

    jeudi 22 septembre 2011 07:07