Get["/"] = _ =>"some data";
Post["/"] = _ =>new {detail="detail.."};
Мне нужно преобразовать ответ на этот форматкак получить происхождение возвращаемого объекта
{
state: state code
data: origin data
}
Итак, я добавить после того, как крючок
After.AddItemToEndOfPipeline(ResponseFormatHook);
...
private void ResponseFormatHook(NancyContext ctx)
{
var apiResponse = new APIResponse();
apiResponse.State = ctx.Response.StatusCode;
using(var stream = new MemoryStream())
{
ctx.Response.Contents.Invoke(stream);
stream.Position = 0;
using (var reader = new StreamReader(stream))
{
// get the origin data
var content = reader.ReadToEnd();
apiResponse.Data = content;
}
}
var response = new JsonResponse(apiResponse, new DefaultJsonSerializer());
response.StatusCode = HttpStatusCode.OK;
ctx.Response = response;
}
Для Get["/"]
, это нормально. вернется {state:200,data:"some data"}
.
Но для Post["/"]
, будет возвращен {state:200,data:"{detail:\"detail..\"}"}
. Данные преобразуются в строку, не являющуюся объектом. Клиент не может десериализоваться сразу.
Итак, как я могу получить исходные данные?
apiResponse.Data=OriginData
, все будет в порядке.
EDIT 1
Может быть, я могу десериализовать данных как
apiResponse.Data=JsonConvert.Deserialize(apiResponse.Data)
.
Но я думаю, что это слишком дорого, не так ли?