NullReferenceException on ForEach JSON c#
本文关键字:JSON ForEach on NullReferenceException | 更新日期: 2024-10-20 19:00:30
我对以下代码有问题。它使用Facebook c#SDK。问题是,我正在提取并打印我所有朋友的工作历史列表。然而,当这些数据不可用时,我认为这会导致NullReferenceException。我在网上看了很多解决方案,但没有找到一个有效的解决方案。如有任何帮助,我们将不胜感激。
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var accessToken = "...";
var client = new FacebookClient(accessToken);
dynamic myInfo = client.Get("me/friends", new { fields = "name,id,work" });
foreach (dynamic friend in myInfo)
{
foreach (dynamic work in myInfo.work) // <---- here
{
Response.Write("Employer: " + work.employer.name + "<br/> Position:" + work.position.name + "<br/><br/>");
}
}
}
}
我已经包括了建议的编辑,但现在得到了一个不同的错误:
namespace WebApplication1.Site
{
public partial class WebForm1 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var accessToken = "xxx";
var client = new FacebookClient(accessToken);
dynamic myInfo = client.Get("me/friends", new { fields = "name,id,work" });
foreach (dynamic friend in myInfo)
{
**foreach (dynamic work in friend.work ?? new[] { new { employer = new { name = string.Empty }, position = new { name = string.Empty } } })**
{
Response.Write("Employer: " + myInfo.work.employer.name);
}
}
}
}
}
"System.Collections.Generic.KeyValuePair"不包含第21行上"work"的定义
您可以提供一个空列表来代替null值,以避免null引用异常:
foreach (dynamic work in friend.work ?? new List<string>())
您得到异常是因为foreach对null值调用.GetEnumerator()。我用了一个新的列表,但放在这里什么并不重要。。只要它不是null并且是可枚举的。
编辑
你可以提供一个匿名类型,提供你需要的属性:
foreach (dynamic work in friend.work ?? new [] { new { employer = new { name = string.Empty}, position = new { name = string.Empty }}})
只需在启动内部循环之前测试myInfo.work是否为null:
if (myInfo.work != null) {
foreach (dynamic work in myInfo.work)
此外,我刚刚注意到你可能使用了错误的对象:
if (friend.work != null) {
foreach (dynamic work in friend.work)
我不熟悉API,但我猜在内部循环中,您可能是在对外部循环中创建的对象的属性进行迭代。
例如:
foreach (dynamic friend in myInfo)
{
foreach (dynamic work in friend.work) // rather than myInfo.work
{
// ...
}
}
您可能还应该对内部循环进行null检查,以防止出现null引用异常。