我是.NET和MVC的新手。正在努力將一些JSON反序列化爲ViewBag中的對象。 JSON來自Azure搜索。我已經驗證了WebHttpRequest返回JSON這樣的:反序列化MVC中的JSON
{
"@odata.context": "https://url.toazuresearch/indexes('index01')/$metadata#docs",
"value": [
{
"@search.score": 0.31507686,
"Id": "34",
"Date": "2017-08-24T09:14:56.193Z",
"Domain": "domain.com",
"RuleName": "Legacy Reports",
"Log": "Log text",
"ChangeId": "changeId",
"ParentId": "0",
"Comments": "Comments"
},
{
"@search.score": 0.2553736,
"Id": "35",
"Date": "2017-08-24T09:14:56.193Z",
"Domain": "domain.com",
"RuleName": "Legacy Reports",
"Log": "Log text",
"ChangeId": "changeId",
"ParentId": "0",
"Comments": "Comments"
}
]
}
我的類看起來是這樣的:
[DataContract]
public class SearchResult
{
[DataMember]
public float SearchScore { get; set; }
[DataMember]
public string Id { get; set; }
[DataMember]
public DateTime Date { get; set; }
[DataMember]
public string Domain { get; set; }
[DataMember]
public string RuleName { get; set; }
[DataMember]
public string Log { get; set; }
[DataMember]
public string ChangeId { get; set; }
[DataMember]
public string ParentId { get; set; }
[DataMember]
public string Comments { get; set; }
}
我的控制器來處理這裏的響應代碼:
try
{
WebResponse response = request.GetResponse();
using (Stream responseStream = response.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
DataContractJsonSerializer serializer =
new DataContractJsonSerializer(typeof(IEnumerable<SearchResult>));
var results =
(IEnumerable<SearchResult>)serializer.ReadObject(responseStream);
ViewBag.SearchResults = results;
}
}
catch (WebException ex)
{
WebResponse errorResponse = ex.Response;
using (Stream responseStream = errorResponse.GetResponseStream())
{
StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
ViewBag.SearchError = reader.ReadToEnd();
ViewBag.SearchResults = "0 Results";
}
throw;
}
而且最後,我試圖在我看來循環播放結果:
@foreach (var searchResult in ViewBag.SearchResults)
{
@searchResult.Id <br />
}
我只是得到一個空白頁面。當我在VS中測試時沒有例外。
大答案和詳細的完美。幹得好 – Darthchai
這是我在幫助論壇上收到的最佳答案之一。感謝您的詳細信息,以及ViewModels上的提示。我現在正在解析Azure搜索結果。再次感謝! – JOb801