Как удалить возврат каретки из вывода JSON моей службы WebAPI? - PullRequest
0 голосов
/ 21 декабря 2018

Я создал службу 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());
    }
}

Я хочу, чтобы мой вывод выглядел как это , но сейчас он выглядит просто как это .


ОБНОВЛЕНИЕ 12/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 ]

0 голосов
/ 21 декабря 2018

Вы не показали свой метод контроллера, который создает ваш JSON.Однако я могу догадаться, что у вас есть какой-то объект.Поскольку вы упоминаете C #, я тоже буду голосовать за Newtonsoft, но вместо этого предложу JsonConvert.SerializeObject () в качестве средства форматирования.https://www.newtonsoft.com/json/help/html/SerializingJSON.htm

Что-то вроде:

var myResult = GetMyResult();
var response = JsonConvert.SerializeObject(myResult);
return response;
0 голосов
/ 21 декабря 2018

Это поведение контролируется настройкой JsonSerializerSettings.Formatting.В соответствии с документацией , значением по умолчанию является None, что означает отсутствие разрывов строк или отступов.

Так что если вы видите новые строки и отступы в выходных данныхЗатем этот параметр был изменен на Newtonsoft.Json.Formatting.Indented где-то.Произошло одно из двух:

  1. Этот параметр был установлен в данном конкретном контроллере / действии, или
  2. Параметры по умолчанию были изменены.Очевидно, что он не был изменен в методе Register, но его можно изменить в любой момент, установив JsonConvert.DefaultSettings.

По сути, поиск по всему решению для любой ссылки на Newtonsoft.Json.Formatting.Indented.

Обновление: Вы используете ODataController, который изменяет используемый сериализатор.Так что он больше не использует Json.NET для сериализации.Здесь есть ответ о том, как заставить его использовать Json.NET.В этом примере показана только сериализация de , поэтому вам придется создать класс для сериализации.Вид раздражает.

0 голосов
/ 21 декабря 2018

Полагаю, вы хотите удалить форматирование в строке JSON.Вы можете сделать это, используя Newtonsoft.Json

   var jtoken = JToken.Parse(strValue);
   var formattedValue = jtoken.ToString(Newtonsoft.Json.Formatting.None);
...