Ответ 1
Если вы хотите передать пользовательский объект JSON в действие MVC, вы можете использовать это решение, оно работает как шарм.
public string GetData()
{
// InputStream contains the JSON object you've sent
String jsonString = new StreamReader(this.Request.InputStream).ReadToEnd();
// Deserialize it to a dictionary
var dic =
Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<String, dynamic>>(jsonString);
string result = "";
result += dic["firstname"] + dic["lastname"];
// You can even cast your object to their original type because of 'dynamic' keyword
result += ", Age: " + (int)dic["age"];
if ((bool)dic["married"])
result += ", Married";
return result;
}
Настоящая выгода от этого решения заключается в том, что вам не требуется определять новый класс для каждой комбинации аргументов, а кроме того, вы можете легко добавлять объекты к их оригинальным типам.
ОБНОВЛЕНО
Теперь вы можете объединить свои методы GET и POST, поскольку ваш метод post больше не имеет никаких аргументов:
public ActionResult GetData()
{
// GET method
if (Request.HttpMethod.ToString().Equals("GET"))
return View();
// POST method
.
.
.
var dic = GetDic(Request);
.
.
String result = dic["fname"];
return Content(result);
}
и вы можете использовать вспомогательный метод, подобный этому, чтобы облегчить вашу работу.
public static Dictionary<string, dynamic> GetDic(HttpRequestBase request)
{
String jsonString = new StreamReader(request.InputStream).ReadToEnd();
return Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(jsonString);
}