从REST API调用Azure搜索,结果以类似JSON的结构返回。
{"@odata.context":"https://xxxx.search.windows.net/indexes('index-blob')/$metadata#docs(metadata_storage_size,metadata_storage_last_modified,metadata_storage_name,metadata_storage_path,metadata_content_type,metadata_title)","value":[{"@search.score":0.012103397,"metadata_storage_size":1479948,"metadata_storage_last_modified":"2017-04-17T18:31:18Z","metadata_storage_name":"90e975d1-3986-4167-87d2-4d1cdbc7be09.pdf","metadata_storage_path":"xxxx","metadata_content_type":"application/pdf","metadata_title":null},{"@search.score":0.004614377,"metadata_storage_size":116973,"metadata_storage_last_modified":"2017-04-13T18:24:01Z","metadata_storage_name":"xxx.pdf","metadata_storage_path":"xxxx","metadata_content_type":"application/pdf","metadata_title":"xxx"}]}
麻烦的是我无法找到实际反序列化的方法。我无法找出一个可以反序列化“@ search.score”的结构(或者如果查询更复杂的类似参数)。我尝试过使用各种JSON-> C#转换器(包括编辑 - >在VS中粘贴特殊功能),但没有任何效果。看起来很奇怪我必须手动解析这些结果......我将它归因于我对Azure Search或JSON不了解的东西。
答案 0 :(得分:3)
如果我正确理解你,问题在于解析其键名中包含特殊字符的JSON对象,那么你可以在POCO(C#class反序列化)中尝试使用JsonProperty
属性:
public class AzureSearchResult {
[JsonProperty("@search.score")]
public float SearchScore { get; set;}
//other variables...
}
有关详细信息,请参阅http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_JsonPropertyAttribute.htm
答案 1 :(得分:0)
如果您使用Azure Search .NET SDK,它将为您执行反序列化。