давно я установил стандарт кодирования для моего приложения, что все действия, возвращающихся JSON бы их результаты помещаются в объект верхнего уровня обертки:Настройка JSON сериализация в выходе действий MVC
var result = {
success: false,
message: 'Something went wrong',
data: {} // or []
}
Это хорошо работал , и обеспечил мне хорошее счастье стандартизации кода.
Сегодня, однако, я понял, что мой серверный код предполагает, что он всегда получает полную сериализацию того, что возвращается. Теперь я хотел бы сериализовать одного из этих парней, где полезная нагрузка «данных» уже является хорошо сформированной строкой JSON.
Это общая схема, которая работает:
bool success = false;
string message = "Something went wrong";
object jsonData = "[{\"id\":\"0\",\"value\":\"1234\"}]"; // Broken
dynamic finalData = new { success = success, message = message, data = jsonData };
JsonResult output = new JsonResult
{
Data = finalData,
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
MaxJsonLength = int.MaxValue
};
return output;
Где ломает то, что элемент «данные» будут получены в виде строки, когда он попадает в браузере, а не в качестве надлежащего JSON объект (или массив в приведенном выше примере) должен быть.
Есть ли способ украсить свойство атрибутом, который говорит «сериализовать как необработанный», или я в области написания пользовательского сериализатора JSON, чтобы сделать эту работу?
Вы должны использовать 'json.parse'. Прочтите полную информацию здесь https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse –
Ну, технически вы нарушаете свой собственный контракт и стандарт. Раньше вы ожидали * объекта *, теперь вы передаете ему строку. Мне кажется, что это плохой путь, но вы можете * написать 'data = JsonSerializer.Deserialize (jsonData)', если нет возможности избежать этой строки. Однако обратите внимание, что вы будете сериализовать его только для последующего десериализации. – Rob
json.parse находится в конце браузера.Я пытаюсь манипулировать сериализацией на стороне сервера. Роб, ты точно входишь в проблему. Я не хочу ее разбирать, просто чтобы сразу же пересмотреть ее (и на самом деле просто положить тонкую обертку вокруг того, что было уже отлично JSON). Я думаю, что я собрал решение, и опубликую это завтра. Спасибо вам обоим! – Eric