Как заставить DotNetCore 2.1 Web API выводить формат Json?Какая библиотека мне нужна? - PullRequest
0 голосов
/ 01 марта 2019

Я буду прямо к делу.Я нахожусь в процессе преобразования веб-сервисов ASP.Net в сервисы DotNetCore 2.1.Мой вопрос очень прост.Как получить вывод json из строки (с глаголом GET)?Я новичок в этом, но почти каждая часть документации и рекомендаций не работает с DotNetCore.

Очевидно, что следующее не будет работать:

[HttpGet]
public string Get()
{
    return "{\"country_code\":\"US\",\"country_name\":\"United States\",\"region_name\":\"California\",\"city_name\":\"Los Angeles\",\"latitude\":\"34.052230\",\"longitude\":\" - 118.243680\",\"zip_code\":\"90001\",\"time_zone\":\" - 08:00\"}";
}

Мне просто нужно преобразовать этоСтрока (или сообщить клиенту), что я хочу вывод в JSON.Следующее также не работает - получил волнистую линию под методом «Json (») и, на всю жизнь, не могу найти ссылку, чтобы убрать ее (я вытащил ее из примера, поэтому они должны использоватьсторонняя библиотека для разбора json или есть ссылка, которую мне не хватает)

[HttpGet]
public JsonResult Get()
{
    return Json("{\"country_code\":\"US\",\"country_name\":\"United States\",\"region_name\":\"California\",\"city_name\":\"Los Angeles\",\"latitude\":\"34.052230\",\"longitude\":\" - 118.243680\",\"zip_code\":\"90001\",\"time_zone\":\" - 08:00\"}", "application/json"); 
}

В идеале я хотел бы сериализовать объект в json, но решил, что начну с чего-то смехотворно простого., если кто-нибудь может помочь.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

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

Простой пример.

public class MyController: Controller {

    [HttpGet]
    public IActionResult Get() {
        var model = new {
            country_code = "US",
            country_name = "United States",
            region_name = "California",
            city_name = "Los Angeles",
            latitude = 34.052230,
            longitude = -118.243680,
            zip_code = 90001,
            time_zone = "- 08:00"
        };
        return Ok(model); //200 OK with content
    }    
}

В более сложных сценариях выбудет получать ваши объекты из источника данных.

Библиотека не требуется, из коробки интегрируется объект (ы) в JSON по умолчанию для вас, если не указано иное.

Если вы настаиваете на передаче строки в ручном формате, используйтеобъект ContemntResult.Передайте ему строку и тип содержимого.

[HttpGet]
public IActionResult Get() {
    string json = "{\"country_code\":\"US\",\"country_name\":\"United States\",\"region_name\":\"California\",\"city_name\":\"Los Angeles\",\"latitude\":\"34.052230\",\"longitude\":\" - 118.243680\",\"zip_code\":\"90001\",\"time_zone\":\" - 08:00\"}";
    return Content(json, new MediaTypeHeaderValue("application/json"));
}

Ссылка Форматирование данных ответа в ASP.NET Core Web API

Форсирование определенного формата

Если вы хотите ограничить форматы ответов для определенного действия, вы можете применить фильтр [Produces].Фильтр [Produces] определяет форматы ответов для определенного действия (или контроллера).Как и большинство фильтров, это можно применить к действию, контроллеру или глобальной области действия.

[Produces("application/json")]
public class AuthorsController

Фильтр [Produces] заставит все действия в AuthorsController возвращать ответы в формате JSON, даже еслидругие приложения форматирования были настроены для приложения, и клиент предоставил заголовок Accept, запрашивающий другой доступный формат.

0 голосов
/ 01 марта 2019

Не возвращает строку, а объект.Поэтому результатом ваших действий является строка json, поэтому вы получите строку в формате JSON, а не объект

Убедитесь, что ваш клиент отправляет заголовок «Content-Type»: «application / json».

[HttpGet]
public Address Get()
{
    return new Address{ CountryCode = "US"} ; 
}
...