XmlConvert 和可为空的结果?

Posted

技术标签:

【中文标题】XmlConvert 和可为空的结果?【英文标题】:XmlConvert and nullable results? 【发布时间】:2010-10-22 00:33:52 【问题描述】:

在我的项目中,我收到一个 XmlElement,我必须将其中的一些属性解析回一个类。

为了映射这些,我使用 XmlConvert 类。但是源是 XML,通常有空节点或不可读的节点。与其抛出一堆错误,我想将一个 NULL 返回存储在我的班级中。

我开始制作一个 XmlConvertExtentions 类,它按照以下精神做事:

public static class XmlConvertExtentions

    public static int? ToNullableInt32 (this XmlConvert c, string s)
        try return XmlConvert.ToInt32(s); 
        catch return null; 
    

我坚信我不是第一个需要这种功能的开发人员,我想知道我是不是又在发明另一个***。 此外,我觉得我正在发明一个非常丑陋的***。 try catch 感觉很糟糕。有没有更好的办法?

--编辑-- 现在我也注意到它甚至不起作用:P 我认为这是因为您不能扩展静态类。

【问题讨论】:

【参考方案1】:

如果节点为null或空,s是什么?

怎么样:

if(string.IsNullOrEmpty(s)) return null;
return XmlConvert.ToInt32(s);

另请注意,LINQ-to-XML 对这些转换的处理更加优雅(通过强制转换)。

【讨论】:

【参考方案2】:

我不知道在您的情况/情况下是否有可能,但您是否已经使用 XML 序列化类,并通过 XmlSerializer 类将 XML 反序列化为您的自定义类的实例,而不是这样做全部手动?

【讨论】:

是的,我有。但是因为输入可以是多种格式并且必须完成一些自定义逻辑,所以标准序列化不起作用。除此之外,我从来没有开箱即用的序列化工作。实在是太有限了。

以上是关于XmlConvert 和可为空的结果?的主要内容,如果未能解决你的问题,请参考以下文章

XmlSerializer 和可为空的属性

JPA 可嵌入 PK 和可为空的字段

Laravel 验证中有时和可为空的区别

将 XDocument.Descendants 与合并运算符一起使用??和可为空的类型

如何在基于块的 API 方法中使用非空和可为空的 Objective-C 关键字

在表达式树中使用可为空的类型