反序列化枚举
我有一个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