XmlSerializer枚举反序列化失败(不存在)空格

时间:2010-12-24 14:44:59

标签: c# xml-serialization

我有一个反序列化的对象,它包含一个枚举'JourneyPatternLinkDirectionEnumeration',它被用作节点'Direction'的值。

当使用值指定'Direction'或未指定时,它在xml中表示为

<Direction />

一切正常。但是,如果它在xml中为

<Direction></Direction>

我收到以下错误:

  

“实例验证错误:''不是   有效值   JourneyPatternLinkDirectionEnumeration“。

我的代码如下:

var xmlTextReader = new XmlTextReader(xmlDocUri);
xmlTextReader.WhitespaceHandling = WhitespaceHandling.None;
xmlTextReader.Normalization = false;

var serializer = new XmlSerializer(typeof(T),  typeof(T).Assembly.GetTypes());

ouput = (T)serializer.Deserialize(xmlTextReader);

有什么想法?有没有更好的方法来做到这一点。

(抱歉,我无法发布完整代码,xml doc是一个65000行的TransXchange doc)

2 个答案:

答案 0 :(得分:3)

我认为你没有选择,如果这是一个错误,那么这是一个错误。更改源XML,或将值声明为字符串,并提供非序列化的枚举包装器属性,或为实现IXmlSerializable的枚举类型创建包装类。

答案 1 :(得分:2)

有些地方将(自闭)元素视为与具有空文本内容的元素明显不同。

假设您不控制源代码,我想知道在这种情况下您是否应该务实并将其更改为字符串成员:

public string Direction {
    get { return enumField.ToString(); }
    set { enumField = (EnumType)Enum.Parse(typeof(EnumType), value);}
}
相关问题