[英]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.