是否可以从Azure搜索反序列化结果?

时间:2017-04-18 13:29:43

标签: c# json azure azure-search

从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不了解的东西。

2 个答案:

答案 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,它将为您执行反序列化。