繁体   English   中英

反序列化枚举

[英]deserializing enums

我有一个xml,其中一个元素的属性可以为空。 例如,

<tests>
<test language="">
.....
</test>
</tests>

现在,语言是从模式创建的类中的枚举类型。 如果指定了语言,它可以正常工作,如果它是空白则无法反序列化(如示例所示)。

编辑:反序列化的代码:

XmlSerializer xmlserializer = new XmlSerializer(type);
StringReader strreader = new StringReader(stringXML);
Object o = serializer.Deserialize(strreader);

我该如何处理这种情况

您可以将枚举属性声明为可空:

 
 
 
  
  public Language? Language { get; set; }
 
  


编辑:好吧,我刚试过,它不适用于属性...这是另一个选项:不要直接序列化/反序列化这个属性,而是序列化一个字符串属性:

[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);
        }
    }
}

您可能需要标记枚举,并添加表示未知的默认项。

例如:

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

有关更多信息,请参阅此处

你可以这样做:

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; }
      }

      .
      .
      .
   }
}

你想要的结果是什么?

由于枚举是不可为空的值类型,因此无法将空值映射到空引用。

object wontBeNull = couldBeNull ?? defaultIfNull;

是我试试的。 它叫做Null-Coalescing运算符 ,当我想要一个null输入的默认值时我会使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM