提问人:Multi stack 提问时间:2/11/2016 最后编辑:Multi stack 更新时间:2/11/2016 访问量:109
对象引发 NullReferenceException
Object throws NullReferenceException
问:
我有一个包含很少公共的类
Product
properties
我还有另一个类应该包含对象列表
ListOfProducts
Product
- 我的service.svn类中有一个方法,我正在检索行,并希望通过创建ListOfProducts的对象并将对象添加到类中存在的List中,并返回此对象。
但似乎这不是应该做的方式。因为接收此列表的 会抛出 .
Product
ListOfProducts
service_GetObjectCompleted
NullReferenceException
ListOfProducts
类
[DataContract()]
public class ListOfProducts
{
[DataMember()]
public List<Product> ProductList { get; set; }
public ListOfProducts()
{
ProductList = new List<Product>();
}
}
Service.svn 类中用于创建对象并将对象添加到其列表中的方法ListOfProducts
Product
public ListOfProducts GetObject()
{
ListOfProducts Listproducts = new ListOfProducts();
........
using (IDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
Product product = new Product(reader["Name"].ToString(), reader["Code"].ToString());
Listproducts.ProductList.Add(product);
}
}
return Listproducts;
}
WCF 的 Completed 事件,该事件从上述方法返回:Listproducts
e
void service_GetObjectCompleted(object sender, GetObjectCompletedEventArgs e)
{
if (e.Result.Count != 0) //throws NullReferenceException
{
PagedCollectionView pagingCollection = new PagedCollectionView(e.Result);
pgrProductGrids.Source = pagingCollection;
grdProductGrid.ItemsSource = pagingCollection;
}
}
我认为我的概念在这里是错误的。这是创建列表对象的正确方法吗?
编辑
在页面的构造函数中,这就是我订阅事件的方式GetObjectCompleted
service.GetObjectCompleted += service_GetObjectCompleted;
在按钮单击事件上,我正在异步调用GetObject
service.GetObjectAsync();
答:
0赞
Joel Coehoorn
2/11/2016
#1
反序列化程序没有调用您的构造函数!
因此,当您在服务的另一端检索 your 时,该属性仍为 。ListOfProducts
ProductList
null
评论
0赞
Joel Coehoorn
2/11/2016
链接的帖子中有一个建议。除此之外,我需要更多地了解您正在做的事情,而不是 Stack Overflow 问题。
0赞
Viru
2/11/2016
@JoelCoehoorn问题似乎有所不同。Link 说在反序列化时不会调用 Constructor,但这不是这里的问题......初始化类型后,应在生成类型时设置 productList 公共数据成员。
0赞
Multi stack
2/11/2016
在该方法中,我放置了一个断点,它包含列表,但在接收端包含GetObject
return Listproducts
e
null
0赞
Multi stack
2/11/2016
#2
解决
问题出在事件中。我需要引用它,而不是引用类似的东西。所以这里是有效的版本:service_GetObjectCompleted
list
e.Result
e.Result.ProductList
void service_GetObjectCompleted(object sender, GetObjectCompletedEventArgs e)
{
if (e.Result.Productlist.Count != 0)
{
PagedCollectionView pagingCollection = new PagedCollectionView(e.Result.Productlist);
pgrProductGrids.Source = pagingCollection;
grdProductGrid.ItemsSource = pagingCollection;
}
}
评论
0赞
Multi stack
2/11/2016
直到我更新了我的服务参考。由于我更改了操作合同的返回类型,因此没有更新
评论
service_GetObjectCompleted
e
null
GetObject
e
只是一个事件参数。我认为它不会返回您数据或.Listproducts