deserializing enums

前端 未结 5 1254
轻奢々
轻奢々 2020-12-06 10:20

I have an xml in which one of the elements has an attribute that can be blank. For e.g.,



.....



        
相关标签:
5条回答
  • 2020-12-06 10:27
    object wontBeNull = couldBeNull ?? defaultIfNull;
    

    Is what I'd try. It's called Null-Coalescing operator, I use it when I want a default for null input.

    0 讨论(0)
  • 2020-12-06 10:35

    You can do it this way:

    namespace Example
    {
    
       public enum Language
       {
         [XmlEnum("en")]
         English,
    
         [XmlEnum("de")]
         Deutsch
       }
    
       public class ExampleClass
       {
    
          private Language? language;
    
          [XmlAttribute("Language")]
          public Language Language
          {
             get { return language ?? Example.Language.English; }
             set { language = value; }
          }
    
          .
          .
          .
       }
    }
    
    0 讨论(0)
  • 2020-12-06 10:38

    You probably need to mark up your enumeration, and add a default item that represents Unknown.

    For example:

    Public Enum EmployeeStatus
       <XmlEnum("")> Unknown = 0
       <XmlEnum("Single")> One = 1
       <XmlEnum("Double")> Two = 2
       <XmlEnum("Triple")> Three = 3
    End Enum
    

    For more information, see here.

    0 讨论(0)
  • 2020-12-06 10:40

    You could declare the enum property as nullable:

    public Language? Language { get; set; }
    


    EDIT: ok, I just tried, it doesn't work for attributes... Here's another option: don't serialize/deserialize this property directly, but serialize a string property instead :

    [XmlIgnore]
    public Language Language { get; set; }
    
    [XmlAttribute("Language")]
    public string LanguageAsString
    {
        get { return Language.ToString(); }
        set
        {
            if (string.IsNullOrEmpty(value))
            {
                Language = default(Language);
            }
            else
            {
                Language = (Language)Enum.Parse(typeof(Language), value);
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-06 10:40

    What would you want the result to be ?

    A blank value cannot be mapped to a null reference since an enum is a non-nullable value type.

    0 讨论(0)
提交回复
热议问题