Я впервые внедряю Json.NET для своего сайта ASP.NET MVC2.
Мой оригинальный код выглядел так:
[HttpPost]
public ActionResult FindMe(string searchFirstName, string searchLastName)
{
this.searchFirstName = searchFirstName;
this.searchLastName = searchLastName;
IEnumerable<HomePageUser> results = doSearch();
bool success = (results.Count() == 0) ? false : true;
return Json(new
{
success = success,
results = results
});
}
Результаты были проблематичными из-за того, что одним из элементов в наборе результатов является Enum, и я действительно хочу значение Text, а не числовое. Кроме того, формат даты является проблемой.
Итак, я нашел Json.NET и изменил свой код так:
[HttpPost]
public JsonNetResult FindMe(string searchFirstName, string searchLastName)
{
this.searchFirstName = searchFirstName;
this.searchLastName = searchLastName;
IEnumerable<HomePageUser> results = doSearch();
bool success = (results.Count() == 0) ? false : true;
JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.SerializerSettings.Converters.Add(new IsoDateTimeConverter());
jsonNetResult.Data = results;// how to add success true/false info?
return jsonNetResult;
}
Это устраняет две вышеупомянутые проблемы, но теперь мне интересно, как сделать это без проблем с моим существующим кодом JavaScript, который ожидал, что json будет выглядеть так:
{
"success":true,
"results":[{
"UserId":545,
"FirstName":"Scott",
"LastName":"Roberson"}]
}
Это позволило мне сначала проверить на response.success, прежде чем приступить к записи ответа, вместо того, чтобы перейти в раздел для обработки ошибок.
Итак, мой вопрос: как добавить успешный узел json верхнего уровня, чтобы он располагался рядом с узлом результатов?
Спасибо.
UPDATE:
Как это часто бывает, акт написания вопроса породил идею в одной из этих Дох! моменты.
, если я добавлю:
var returnPackage = new { success = success, results = results};
затем добавьте это в jsonNetResult.Data примерно так:
jsonNetResult.Data = returnPackage;
Отлично работает.
Спасибо, в любом случае.
Финальный код:
[HttpPost]
public JsonNetResult FindMe(string searchFirstName, string searchLastName)
{
this.searchFirstName = searchFirstName;
this.searchLastName = searchLastName;
IEnumerable<HomePageUser> results = doSearch();
bool success = (results.Count() == 0) ? false : true;
var returnPackage = new { success = success, results = results};
JsonNetResult jsonNetResult = new JsonNetResult();
jsonNetResult.SerializerSettings.Converters.Add(new IsoDateTimeConverter());
jsonNetResult.Data = returnPackage;
return jsonNetResult;
}