I'm new to .NET and MVC. Struggling to deserialize some JSON to an object in the ViewBag. The JSON is coming from Azure Search. I've verified the WebHttpRequest returns JSON like this:
{
"@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"
}
]
}
My class looks like this:
[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; }
}
My code in the controller to handle the response here:
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;
}
And finally, I'm trying to loop through the results in my view:
@foreach (var searchResult in ViewBag.SearchResults)
{
@searchResult.Id <br />
}
I'm just getting an empty page. No exceptions when I test in VS.