相关疑难解决方法(0)

反序列化枚举

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

<tests>
<test language="">
.....
</test>
</tests>
Run Code Online (Sandbox Code Playgroud)

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

编辑:反序列化的代码:

XmlSerializer xmlserializer = new XmlSerializer(type);
StringReader strreader = new StringReader(stringXML);
Object o = serializer.Deserialize(strreader);
Run Code Online (Sandbox Code Playgroud)

我该如何处理这种情况

.net c# xml xml-deserialization

17
推荐指数
3
解决办法
2万
查看次数

XmlSerializer:如何反序列化不再存在的枚举值

我正在使用XMLSerializer将此类保存到文件中.该类有一个字符串和一个枚举,如下所示:

public class IOPoint
{
     string Name {get; set;}
     TypeEnum {get; set;}
}


public enum TypeEnum
{
    Temperature,
    Pressure,
    Humidity,
}
Run Code Online (Sandbox Code Playgroud)

序列化时,它看起来像这样.

<IOPoint>
  <Name>Relative Humidity</Name>
  <TypeEnum>Humidity</TypeEnum>
</IOPoint>
Run Code Online (Sandbox Code Playgroud)

我一直在序列化和反序列化这个对象,几个版本都没有问题.我不再想支持湿度,所以我将它从枚举中删除了.但是,这会在从XML反序列化时导致异常,因为TypeEnum字段中的值Humidity不是TypeEnum的有效值.这是有道理的,但如何处理呢?

我想做的就是忽略这个错误.并将值保留为null.我已经尝试实现OnUnknownElement XmlDeserilizationEvent类.不幸的是,这并没有发现这个错误.

关于如何捕获和忽略此错误的任何想法(我可以在反序列化完成后清理).

米奇

c# xml versioning serialization deserialization

8
推荐指数
1
解决办法
5927
查看次数