我正在尝试使用 SharePoint 客户端框架执行搜索,使用 Windows 应用程序中的可移植 dll。
使用 Fiddler 我可以看到我的搜索已执行,并返回元数据和搜索结果的 JSON 集合。这与非便携式 CSOM 的结果相同。
当 CSOM 尝试将结果映射到它的数据对象时,我得到以下异常:
无法将“System.Collections.Generic.Dictionary`2[System.String,System.Object]”类型的对象转换为“Microsoft.SharePoint.Client.Search.Query.ResultTableCollection”。
此异常发生在 CSOM(便携式)内部。非便携式 CSOM 无异常运行,并返回预期结果。
我正在运行以获取此异常的代码是:
var query = new KeywordQuery(ctx);
query.QueryText = "something";
var executor = new SearchExecutor(ctx);
var results = executor.ExecuteQuery(query);
await ctx.ExecuteQueryAsync();
上面的 ctx 是一个已经过认证的 ClientContext。其他请求(例如获取特定列表)按预期工作。
我从 c:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\ISAPI 引用以下 dll:
- Microsoft.SharePoint.Client.Portable.dll
- Microsoft.SharePoint.Client.Runtime.Portable.dll
- Microsoft.SharePoint.Client.Runtime.WindowsStore.dll
- Microsoft.SharePoint.Client.Search.Portable.dll
我的问题是。
如何解决此问题,以便我可以使用 CSOM 从 Windows 应用商店应用程序运行搜索查询?
更新:我在验证 ClientContext 后添加了以下内容:
ctx.ExecutingWebRequest += (s, e) =>
e.WebRequest.Headers["Accept-Encoding"] = "gzip, deflate";
这解决了眼前的问题,但引入了一个新问题。我现在得到一个 System.FormatException:
格式不正确的 JSON 流。
由于来自可移植和非可移植 CSOM 的 JSON 是相同的,因此一个 CSOM 而不是另一个 CSOM 中不应出现解析错误。