簡體   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