我目前正致力于VS2012上的数据导入应用程序,该应用程序获取XML数据并将其导入数据库。我有一个xsd架构,xml文档必须匹配。
在我的xsd中,我将<Loan>
定义为minOccurs=0
,这显然意味着不必设置Loan元素。
现在,当我正在使用我的虚拟数据并且没有(并且它的内部有其他元素)时,它返回给我一个错误,表示值不能为空。我将其追溯到我的C#代码,发现它失败的行是:
int loan_count = fam.Family[i].Loan.Count();
即使我将minOccurs设置为0,Loan元素仍然不允许空值。
无论如何确保当没有<Loan>
元素时,上面的代码返回0,而不是Null。
固定!答案是接受的答案
答案 0 :(得分:1)
您的问题与XML或您的Loan
元素本身无关。您似乎使用Linq扩展方法Enumerable.Count<TSource>(this IEnumerable<TSource> source)
来计算贷款数量。如果输入序列为空,This method会故意抛出ArgumentNullException
。 (我相信所有 Linq extension methods会抛出一个可输入的null输入。)要解决这个问题,你可以自己做一个扩展方法来替换Count()
,或者只做
int loan_count = (fam.Family[i].Loan == null ? 0 : fam.Family[i].Loan.Count());
答案 1 :(得分:0)
MinOccurs = 0表示您必须传递一个值。该值可能会或可能不会允许Null;取决于那些元素的可用设置。它可以合理地是&#34; MinOccurs = 0&#34;和&#34; Nillable = false&#34;这意味着你不必传递一个值,但如果你这样做,它就不能是Nil。如果您有Null值,并且您需要遵守XSD,则不要传递该值。