在反序列化海量XML文档时忽略空引用

时间:2015-12-23 14:32:41

标签: c# xml xml-deserialization

我从WCF服务获得了大量的XML负载,我需要将其写入SQL数据库。我正在使用最新版本的.NET和Entity Framework 6。

“好的,那很好,”你可能会说,“但问题是什么?”

嗯,XML被反序列化为C#对象(从paste-special生成),它们的工作非常好。但是,每当来自服务的有效负载不包含某些字段时,当我将XML对象写入EF对象时,我得到一个空引用异常(这是一个类方法):

public ICollection<object> GetObjects()
{
    List<object> objs = new List<object>();

    foreach (var i in XmlObject.SubObj.SubObj.SubObj)
    {
        objs.Add(new MyEfObject() {
            Prop1 = XmlObject.SubObj.SubObj.SubObj.ObjProperty // If "ObjProperty" is null,
                                                               // I get a null reference exception
        });
    }

    return objs;
}

所以,我有非常优雅的代码来检查

if (!ReferenceEquals(XmlObject.SubObj.SubObj.SubObj.ObjProperty, null) {
    // Do stuff
}

这通常没问题,但是对象太大了,我想避免输入150次以上(以及对象的所有对象属性)。

必须有一种更优雅的方式,不是吗?

1 个答案:

答案 0 :(得分:1)

您可以简单地使用==,但IMO不优雅的部分不会检查null(使用空对象模式可以避免)但是您正在访问的事实{{1}我认为你的课程太过分了。

那就是说,如果你不能改变这个,那么你可以使用LINQ来使你的代码更具可读性:

XmlObject.SubObj.SubObj.SubObj.ObjProperty