我从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次以上(以及对象的所有对象属性)。
必须有一种更优雅的方式,不是吗?
答案 0 :(得分:1)
您可以简单地使用==
,但IMO不优雅的部分不会检查null
(使用空对象模式可以避免)但是您正在访问的事实{{1}我认为你的课程太过分了。
那就是说,如果你不能改变这个,那么你可以使用LINQ来使你的代码更具可读性:
XmlObject.SubObj.SubObj.SubObj.ObjProperty