SharePoint中ListItem字段值打印显示类型而非实际内容的问题
问题
我有一个声明为ListItem类型的变量contractItem,已经通过SQL流程完成数据填充,写回SQL的操作也完全正常,所有信息都符合预期。但当我想把contractItem里的特定值写入日志文件时,用下面两种代码:
String sTxt = "Subject = " + contractItem.FieldValues["Subject"].ToString();
或者
String sTxt = "Subject = " + contractItem.FieldValues["Subject"];
得到的结果都是"Subject = Microsoft.SharePoint.Client.FieldLookupValue",而不是我预期的"Subject = Documentation e-content 365",这哪里出问题了?
分析与解决方法
嗨,这问题其实很常见,原因是你访问的Subject字段是SharePoint的查找字段(Lookup Field),它对应的类型不是普通的字符串,而是Microsoft.SharePoint.Client.FieldLookupValue对象。
你直接调用ToString()或者直接拼接字符串时,默认会调用这个对象的基类ToString方法,而它返回的就是类型的完整名称,不是字段实际存储的显示值。
要拿到你想要的内容,得访问FieldLookupValue的专属属性:
- 如果要获取显示文本,用
LookupValue属性 - 如果要获取对应记录的ID,用
LookupId属性
给你写个修正后的示例代码:
// 先把FieldValues里的值转成FieldLookupValue类型 var subjectLookup = contractItem.FieldValues["Subject"] as Microsoft.SharePoint.Client.FieldLookupValue; // 用空合并运算符处理可能的空值情况,避免空引用异常 String sTxt = "Subject = " + (subjectLookup?.LookupValue ?? "无对应值");
这样就能得到你预期的"Subject = Documentation e-content 365"啦。
内容的提问来源于stack exchange,提问作者user86019
相关产品推荐
相关产品推荐

