Zoinky
Zoinky

Reputation: 5029

Creating json object in mvc and returning from controller

I need to create the following in a loop, my has "name" and "id" where name will be used for the value property of the json object and id will be used for the "data" and query will be some string I can set. I tried using keypair but could not figure out how to do this property. Any help would be appreciated.

{

    "query": "Unit",
    "suggestions": [
        { "value": "United Arab Emirates", "data": "AE" },
        { "value": "United Kingdom",       "data": "UK" },
        { "value": "United States",        "data": "US" }
    ]
}

I am trying to return results for this autocomplete widget https://www.devbridge.com/sourcery/components/jquery-autocomplete/

Upvotes: 3

Views: 26284

Answers (3)

Liam
Liam

Reputation: 29760

Answer from OP:

Figured it out, below is the code

public ActionResult GetCities(string query)
    {
        var obj = new CitySuggestion();
        obj.suggestions.Add(new Suggestion { value = "test1", data = "test1" });
        obj.suggestions.Add(new Suggestion { value = "test2", data = "test2" });
        obj.suggestions.Add(new Suggestion { value = "test3", data = "test3" });

       return  Content(JsonConvert.SerializeObject(obj), "application/json");
    }
    public class CitySuggestion
    {
        public CitySuggestion()
        {
            suggestions = new List<Suggestion>();
        }
        public List<Suggestion> suggestions
        {
            get;
            set;
        }
    }
    public class Suggestion
    {
        public string value { get; set; }
        public string data { get; set; }
    }

Upvotes: 1

user3559349
user3559349

Reputation:

You can just create an anonymous object. To return the JSON as indicated in your question, it would be

public JsonResult GetCities(string query)
{
  var data = new
  {
    query = "Unit",
    suggestions = new[]
    {
      new { value = "United Arab Emirates", data = "AE" },
      new { value = "United Kingdom", data = "UK" },
      new { value = "United States", data = "US" }
    }
  };
  return Json(data, JsonRequestBehavior.AllowGet);
}

Side note: Unsure of the purpose of the method parameter?

Upvotes: 6

Matthew Jones
Matthew Jones

Reputation: 26190

I hate to go full blown on this, but maybe create your own classes?

public class DataValuePair
{
    public string Data {get;set;}
    public string Value {get;set;}
}

public class SearchResult
{
    public string Query {get;set;}
    public List<DataValuePair> Suggestions {get;set;}
}

And now you can return a JSON Result

return Json(mySearchResult);

Upvotes: 4

Related Questions