DataTable序列化提示未设置表名,已设置TableName仍报错是什么原因?
错误原因
该报错是因为参与序列化操作的DataTable未设置TableName属性,你代码中的问题在于属性设置逻辑被覆盖失效:
// 第一步:手动实例化DataTable并设置名称 DataTable dt = new DataTable(); dt.TableName = "zubur amak"; // 第二步:直接将接口返回的新DataTable实例赋值给dt,之前设置过名称的实例被丢弃 dt = service.GetTransactions(accID);
执行完第二行赋值后,dt指向的是GetTransactions方法返回的全新实例,这个实例并没有设置TableName,后续数据绑定触发序列化时就会抛出错误。
修复方案
调整代码顺序,给接口返回的DataTable设置名称即可:
string accID = Session["accountid"].ToString(); DataTable dt = service.GetTransactions(accID); dt.TableName = "zubur amak"; transactions.DataSource = dt; transactions.DataBind();
如果GetTransactions是你可维护的内部方法,也可以直接在方法内部给返回的DataTable设置默认TableName,避免调用侧每次重复设置。
内容的提问来源于stack exchange,提问作者IdoThePro
相关产品推荐
相关产品推荐

