Как удалить возврат каретки из вывода JSON моей службы WebAPI?
Я создал службу Web API, которая выводит JSON, который должен использоваться сеткой данных KendoUI. Суть в том, что таблица данных KendoUI ОЧЕНЬ требовательна к JSON-коду, который она использует; у него не должно быть никаких возвратов каретки / перевода строки. Это должен быть один большой блок неформатированного JSON.
Мы работали с кем-то из Telerik, и они установили какой-то прокси ( https://cors.io/?http://js01.consultwithus.us/odata/vw_FilesToBeProcessed_Dashboard), но это всего лишь бинты.
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
// enable CORS
config.EnableCors();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// we must set odata to version 2
var vers = new Version(2, 0);
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.DataServiceVersion = vers;
builder.MaxDataServiceVersion = vers;
builder.EntitySet<vw_FilesToBeProcessed_Dashboard>("vw_FilesToBeProcessed_Dashboard");
config.Routes.MapODataServiceRoute("odata", "odata", builder.GetEdmModel());
}
}
Я хочу, чтобы мой вывод выглядел так, но сейчас он выглядит вот так.
ОБНОВЛЕНИЕ 28/28/2018
Вот код для моего контроллера:
[EnableCors(origins: "http://js01.consultwithus.us", headers: "*", methods: "*")]
public class vw_FilesToBeProcessed_DashboardController : ODataController
{
private CSS_DevEntities db = new CSS_DevEntities();
// GET: odata/vw_FilesToBeProcessed_Dashboard
[EnableQuery]
public IQueryable<vw_FilesToBeProcessed_Dashboard> Getvw_FilesToBeProcessed_Dashboard()
{
return db.vw_FilesToBeProcessed_Dashboard;
}
// GET: odata/vw_FilesToBeProcessed_Dashboard(5)
[EnableQuery]
public SingleResult<vw_FilesToBeProcessed_Dashboard> Getvw_FilesToBeProcessed_Dashboard([FromODataUri] int key)
{
return SingleResult.Create(db.vw_FilesToBeProcessed_Dashboard.Where(vw_FilesToBeProcessed_Dashboard => vw_FilesToBeProcessed_Dashboard.Files_PK == key));
}
// PUT: odata/vw_FilesToBeProcessed_Dashboard(5)
public IHttpActionResult Put([FromODataUri] int key, Delta<vw_FilesToBeProcessed_Dashboard> patch)
{
Validate(patch.GetEntity());
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
vw_FilesToBeProcessed_Dashboard vw_FilesToBeProcessed_Dashboard = db.vw_FilesToBeProcessed_Dashboard.Find(key);
if (vw_FilesToBeProcessed_Dashboard == null)
{
return NotFound();
}
patch.Put(vw_FilesToBeProcessed_Dashboard);
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!vw_FilesToBeProcessed_DashboardExists(key))
{
return NotFound();
}
else
{
throw;
}
}
return Updated(vw_FilesToBeProcessed_Dashboard);
}
// POST: odata/vw_FilesToBeProcessed_Dashboard
public IHttpActionResult Post(vw_FilesToBeProcessed_Dashboard vw_FilesToBeProcessed_Dashboard)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.vw_FilesToBeProcessed_Dashboard.Add(vw_FilesToBeProcessed_Dashboard);
try
{
db.SaveChanges();
}
catch (DbUpdateException)
{
if (vw_FilesToBeProcessed_DashboardExists(vw_FilesToBeProcessed_Dashboard.Files_PK))
{
return Conflict();
}
else
{
throw;
}
}
return Created(vw_FilesToBeProcessed_Dashboard);
}
// PATCH: odata/vw_FilesToBeProcessed_Dashboard(5)
[AcceptVerbs("PATCH", "MERGE")]
public IHttpActionResult Patch([FromODataUri] int key, Delta<vw_FilesToBeProcessed_Dashboard> patch)
{
Validate(patch.GetEntity());
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
vw_FilesToBeProcessed_Dashboard vw_FilesToBeProcessed_Dashboard = db.vw_FilesToBeProcessed_Dashboard.Find(key);
if (vw_FilesToBeProcessed_Dashboard == null)
{
return NotFound();
}
patch.Patch(vw_FilesToBeProcessed_Dashboard);
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!vw_FilesToBeProcessed_DashboardExists(key))
{
return NotFound();
}
else
{
throw;
}
}
return Updated(vw_FilesToBeProcessed_Dashboard);
}
// DELETE: odata/vw_FilesToBeProcessed_Dashboard(5)
public IHttpActionResult Delete([FromODataUri] int key)
{
vw_FilesToBeProcessed_Dashboard vw_FilesToBeProcessed_Dashboard = db.vw_FilesToBeProcessed_Dashboard.Find(key);
if (vw_FilesToBeProcessed_Dashboard == null)
{
return NotFound();
}
db.vw_FilesToBeProcessed_Dashboard.Remove(vw_FilesToBeProcessed_Dashboard);
db.SaveChanges();
return StatusCode(HttpStatusCode.NoContent);
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
private bool vw_FilesToBeProcessed_DashboardExists(int key)
{
return db.vw_FilesToBeProcessed_Dashboard.Count(e => e.Files_PK == key) > 0;
}
}
У меня была Visual Studio скаффолд это для меня на основе моего EDM.
3 ответа
Я считаю, что вы хотите удалить форматирование в строке JSON. Вы можете сделать это с помощью Newtonsoft.Json
var jtoken = JToken.Parse(strValue);
var formattedValue = jtoken.ToString(Newtonsoft.Json.Formatting.None);
Это поведение контролируется JsonSerializerSettings.Formatting
установка. Согласно документации, значением по умолчанию является None
, что означает отсутствие разрывов строк или отступов.
Так что, если вы видите новые строки и отступы в выходных данных, то этот параметр был изменен на Newtonsoft.Json.Formatting.Indented
где-то. Произошло одно из двух:
- Этот параметр был установлен в этом конкретном контроллере / действии, или
- Настройки по умолчанию были изменены. Это явно не было изменено в
Register
метод, но его можно изменить в любой момент, установивJsonConvert.DefaultSettings
,
В основном, ищите все ваше решение для любой ссылки на Newtonsoft.Json.Formatting.Indented
,
Обновление: вы используете ODataController
, который изменяет используемый сериализатор. Так что он больше не использует Json.NET для сериализации. Здесь есть ответ о том, как заставить его использовать Json.NET. Этот пример показывает только сериализацию, так что вам придется создать класс для сериализации. Вид раздражает.
Вы не показали свой метод контроллера, который создает ваш JSON. Однако я могу догадаться, что у вас есть какой-то объект. Поскольку вы упоминаете C#, я тоже буду голосовать за Newtonsoft, но вместо этого предложу JsonConvert.SerializeObject() в качестве средства форматирования. https://www.newtonsoft.com/json/help/html/SerializingJSON.htm
Что-то вроде:
var myResult = GetMyResult();
var response = JsonConvert.SerializeObject(myResult);
return response;