Csharp/C#教程:反序列化枚举分享


反序列化枚举

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

  .....   

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

编辑:反序列化的代码:

 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  Unknown = 0  One = 1  Two = 2  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输入的默认值时,我会使用它。

上述就是C#学习教程:反序列化枚举分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1005709.html

(0)
上一篇 2021年12月28日
下一篇 2021年12月28日

精彩推荐