【发布时间】:2021-04-25 16:00:10
【问题描述】:
我正在将 Azure 认知搜索 服务的 SDK 从 v10 更新到 v11。我已按照指南中的所有步骤进行升级,但是我注意到索引(合并或上传)操作的一个奇怪行为:UploadDocumentAsync(但也有用于索引数据的其他方法) 操作在 Collection (Edm.ComplexType) 类型的属性为 null 时失败,并出现以下错误:
在尝试读取属性的内容时,从 JSON 读取器读取了“PrimitiveValue”类型的节点。但是,“StartArray”节点应该是 json。
IndexDocumentsResult response = await searchClient.UploadDocumentsAsync<T>(documents).ConfigureAwait (false);
v10 没有出现这个问题。我发现的一种解决方法是将集合设置为空数组而不是空值,但我想找到更好的解决方案。
编辑: 我从 Microsoft.Azure.Search v10.1.0 升级到 Azure.Search.Documents v11.1.1 以下是用于索引数据的通用 T 类的示例:
public class IndexEntity
{
[JsonProperty("@search.score")]
public double SearchScore { get; set; }
[JsonProperty("Key")]
public Guid Id { get; set; }
[JsonProperty("Code")]
public string Code { get; set; }
[JsonProperty("ComplexObj")]
public ComplexType[] CollectionOfComplexType{ get; set; }
}
遵循ModelObjectToIndex的定义
public class ComplexType
{
[JsonProperty("Id")]
public string Id { get; set; }
[JsonProperty("Value")]
public string Value { get; set; }
}
基本上当 CollectionOfComplexType 属性为空时,我会收到上述错误。如果我将其设置为空数组,则不会发生错误,但如上所述我不喜欢这种解决方案,而且在旧版本中它是允许的操作(索引已成功完成)
【问题讨论】:
-
请格式化您的问题,以便于阅读,
-
@aybe 现在好点了吗?
-
您能否编辑您的问题以包括 T 的定义和文档实例的详细信息?这将帮助我们解决问题。
-
绝对更好
-
您使用的是什么版本的 Azure.Search.Documents?我是它的开发人员之一,我们确实在旧版本中遇到了一些问题,这些问题并不期望在响应中出现文字
null,因此反序列化可能会引发这种情况。您是否有可以清理和共享的文档示例?
标签: c# json azure azure-cognitive-search azure-sdk-.net