Давным-давно я установил стандарт кодирования для своего приложения, согласно которому все действия, возвращающие JSON, будут помещать свои результаты в объект-оболочку верхнего уровня:
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
. Подробнее читайте здесь developer.mozilla.org/ en-US/docs/Web/JavaScript/Reference/ - person Pratik Gaikwad   schedule 09.12.2016data = JsonSerializer.Deserialize(jsonData)
, если нет способа избежать этой строки. Однако обратите внимание, что вы будете сериализовать его только для того, чтобы потом десериализовать. - person Rob   schedule 09.12.2016