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

Wir*_*ssG 1 c# json azure azure-cognitive-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"}]}
Run Code Online (Sandbox Code Playgroud)

问题是我找不到真正反序列化的方法。我想不出反序列化“@search.score”的结构(如果查询更复杂,则可以使用类似的参数)。我尝试过使用各种 JSON->C# 转换器(包括 VS 中的 Edit->Paste Special),但没有任何效果。我必须手动解析这些结果似乎很奇怪……我将其归因于我对 Azure 搜索或 JSON 不了解的某些内容。

nbo*_*ans 5

如果我正确理解您并且问题在于解析键名中包含特殊字符的 JSON 对象,那么您可以尝试JsonProperty在 POCO(反序列化为 C# 类)中使用这样的属性:

public class AzureSearchResult {
    [JsonProperty("@search.score")]
    public float SearchScore { get; set;}
    //other variables...
}
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_JsonPropertyAttribute.htm