Мой .NET API возвращает JSON в виде строки.Как мне вернуть его? - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть процесс SQL Server, который возвращает JSON.Я знаю, что процесс работает и возвращает действительный JSON, поскольку я могу проверить его с помощью различных инструментов, включая функцию SQL isjson.

Однако некоторые инструменты при вызове моего API, который вызывает эти процессы, не могут проверить JSONпоскольку он заключен в двойные кавычки и экранирует каждую двойную кавычку в JSON.

Это вывод SQL:

{"APIResult":[{"ID":200,"Status_Message":"Success","Developer_Message":"Successful login for D56D10AC-3A74-42FC-8BB5-F783A6C0C556 33E4F907-F1E5-4F1B-8CA5-5521291E683A (AppID: (null)).","User_Message":"Successful login","User":[{"ID":"D56D10AC-3A74-42FC-8BB5-F783A6C0C556"}]}]}

И это вывод почтальона:

"{\"APIResult\":[{\"ID\":200,\"Status_Message\":\"Success\",\"Developer_Message\":\"Successful login for D56D10AC-3A74-42FC-8BB5-F783A6C0C556 33E4F907-F1E5-4F1B-8CA5-5521291E683A (AppID: (null)).\",\"User_Message\":\"Successful login\",\"User\":[{\"ID\":\"D56D10AC-3A74-42FC-8BB5-F783A6C0C556\"}]}]}"

Некоторые инструменты синтаксического анализа (jsonlint) подходят для второго формата и возвращают его в качестве действительного JSON.Другие (http://json.parser.online.fr/), не так уж и много. Почтальон, очевидно, счастлив, но мой разработчик мобильных устройств не может заставить его работать как действительный JSON.

После некоторой помощи здесь, я понимаю, что API "должен"выводить заголовок содержимого типа application / JSON, и вывод не должен быть строкой.

Контроллер имеет:

public string Get(string key) { 
    string message = "";
    DataSet ds = new DataSet(); 
    SqlDataAdapter da = new SqlDataAdapter(cmd2); 
    da.Fill(ds); 
    message = ds.Tables[0].Rows[0][0].ToString(); 
    return message; 
}

Какой тип подразумевает, что он преобразуется вstring.

Итак, мой вопрос:

Как установить заголовок на выходе, чтобы он возвращал JSON, а не строку?

1 Ответ

0 голосов
/ 14 февраля 2019

Скорее всего, данные дважды сериализуются.Это escape-символы в фактическом ответе.

, поскольку данные из базы данных уже являются строкой JSON, затем возвращают содержимое как есть, но действия должны быть немного реорганизованы.

public IHttpActionResult Get(string key) { 

    //...

    DataSet ds = new DataSet(); 
    SqlDataAdapter da = new SqlDataAdapter(cmd2); 
    da.Fill(ds); 
    var json = ds.Tables[0].Rows[0][0].ToString();         
    var response = Request.CreateResponse(HttpStatusCode.OK);
    response.Content = new StringContent(json, Encoding.UTF8, "application/json");
    return ResponseMessage(response);
}

Необработанный JSON передается как StringContent непосредственно в ответ, чтобы избежать попыток платформы сериализовать его для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...