反序列化枚举 [英] deserializing enums

查看:127
本文介绍了反序列化枚举的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个XML,其中的元素之一具有可以是空白的一个属性。 对于如,

I have an xml in which one of the elements has an attribute that can be blank. For e.g.,

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

现在,语言是枚举类型从模式中创建的类。它工作正常,如果指定的语言,它未能反序列化,如果它是空白(如图所示例子)。

Now, language is enum type in the classes created from the schema. It works fine if the language is specified, it fails to deserialize if it is blank (as shown in example).

编辑:code反序列化:

Code for deserialization:

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

我该如何处理这种情况

How can I handle this scenario

推荐答案

<打击> 你可以声明枚举属性为可为空:

You could declare the enum property as nullable:

public Language? Language { get; set; }

编辑:好吧,我只是想,它并不适用于属性工作...这里有另一个选择:不序列化/反序列化直接此属性,但序列化一个字符串属性,而不是:

ok, I just tried, it doesn't work for attributes... Here's another option: don't serialize/deserialize this property directly, but serialize a string property instead :

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

这篇关于反序列化枚举的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆