将Azure搜索结果反序列化为您自己的模型的最佳方法是什么?

时间:2016-01-15 00:11:56

标签: c# asp.net json deserialization azure-search

目前我正在做的是序列化JsonResult.Data然后反序列化为dynamic变量,然后在每行循环并获得Document。有办法处理这个吗?感谢

            if (string.IsNullOrWhiteSpace(searchTerm_))
                searchTerm_ = "*";
            _azureSearch = new AzureSearchService("afindexdev");
            JsonResult result = new JsonResult
            {
                JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                Data = _azureSearch.SearchAssetFactory(searchTerm_).Results
            };

            string json = JsonConvert.SerializeObject(result.Data);
            var resultJsonString = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(json);

            foreach (dynamic row in resultJsonString)
            {
                var associatemItem = new AssociatedItem();
                associatemItem.Id = row.Document.Id;
                associatemItem.Title = row.Document.Title;
                associatemItem.Type = row.Document.Type;

                searcResult.AssociatedItems.Add(associatemItem);
            }

2 个答案:

答案 0 :(得分:0)

这个怎么样?

var associatedItem = Newtonsoft.Json.JsonConvert.DeserializeObject&lt;列表&lt; AssociatedItem&gt; &GT;(JSON);

这样你就不必亲自制作自己的物品了。

答案 1 :(得分:0)

您可以使用属性[SerializePropertyNamesAsCamelCase]为要反序列化的属性定义模型。此属性包含在Microsoft.Azure.Search库中。之后,您需要做的就是在搜索通用中定义您的模型 - 比如这个酒店类

var sp = new SearchParameters();

if (!String.IsNullOrEmpty(filter))
{
    sp.Filter = filter;
}

DocumentSearchResult<Hotel> response = indexClient.Documents.Search<Hotel>(searchText, sp);

您可以找到更多信息here