Я пытаюсь создать объект JSON в приложении .Net 5. Параметры по умолчанию, которые я представляю, - Microsoft.AspNet.Mvc.Formatters.Json
, Microsoft.Extensions.Configuration.Json
и Newtonsoft.Json
, когда я использую Visual Studio 2015 Qucik Actions на Json
. Я понимаю, что Configuration.Json
предназначен для чтения формы appsettings.json
, поэтому, вероятно, это не то, что я хотел бы использовать для создания объекта JSON. Я не могу найти никакой реальной информации о Formatters.Json
, о том, как ее использовать, или о том, что она предназначена для использования. Newtonsoft.Json
будет задокументирован, но лучше ли он над Formatters.Json
? Какой из двух я должен использовать?Создание объекта JSON в ASP.Net
ответ
Взятые непосредственно из ASP.NET Core 1 tests
var expected = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(new { foo = "abcd" }));
Также приняты from the tests и слегка модифицирован, назовем его с HttpClient, чтобы увидеть, как отправить ваш json на сервер.
var response = await Client.PostAsync( "http://localhost/api/ActionUsingSpecificFormatters", new StringContent(yourJsonContent, Encoding.UTF8, "application/json"));
По Newtonsoft вы можете просто кодировать, а затем делать все, что вы хотите после этого.
Product product = new Product(); product.Name = "Apple"; product.ExpiryDate = new DateTime(2008, 12, 28); product.Price = 3.99M; product.Sizes = new string[] { "Small", "Medium", "Large" }; string output = JsonConvert.SerializeObject(product); //{ // "Name": "Apple", // "ExpiryDate": "2008-12-28T00:00:00", // "Price": 3.99, // "Sizes": [ // "Small", // "Medium", // "Large" // ] //} Product deserializedProduct = JsonConvert.DeserializeObject(output);
Вводя это вместе - я только что испытал это. Имейте в виду, что это реальный общий проход через тест с MVC 6 (ASP.NET 5 т.е. ASP.NET ядра 1) :)
[HttpGet] public async Task<string> Get() { var client = new HttpClient(); var customer = new Customer() { Name = "Schmo", Address = "1999 Purple Rain St" }; var customerJson = JsonConvert.SerializeObject(customer); var response = await client.PostAsync( "http://localhost:4815/api/Customer", new StringContent(customerJson, Encoding.UTF8, "application/json")); //just some template output to test which I'm getting back. string resultJson = "{ 'Name':'adam'}"; if (response.StatusCode == HttpStatusCode.OK) { resultJson = await response.Content.ReadAsStringAsync(); var updatedCustomer = JsonConvert.DeserializeObject(resultJson); } return resultJson; } public class Customer { public string Name { get; set; } public string Address { get; set; } }
Ваши первые предложения не применяются, поскольку они устарели. Ваша ссылка на учебник WebAPI 2, и я не прошу WebAPI 2. В ASP.Net 5 'HttpClient' имеет метод' PostAsync', а не 'PostAsJsonAsync'. И мне удалось найти много информации о Netwonsoft, но почти нет в «Formatters.Json», поэтому я не был уверен, что нам лучше. – Matthew
Первое предложение заключалось в вызове webapi от клиента - что, по-вашему, вы делаете - ваш клиент asp..net - нет? ASP.NET 5 имеет json.net с ним (в наших шаблонах ящиков) - для него была выпущена только новая версия. –
Да, но половина вашего ответа по-прежнему не так. 'HttpClient' больше не имеет' PostAsJsonAsync', так что учебник не будет работать. – Matthew
вы должны использовать NewtonSoft.Json, если вам нужно сериализовать объекты, как JSON
Можете ли вы рассказать о том, почему этот, а не «Форттерс.Джон»? На 'Formatters.Json' нет подробной информации о деталях, поэтому я не могу сравнивать/сравнивать их, – Matthew
На самом деле я был, вероятно, слишком поспешным с моим ответом, под капотом Formatters.Json использует Newtonsoft.Json, поэтому я думаю, что вы могли бы используйте один, но, вероятно, следует просто использовать Formatters.Json, если вам не нужно что-то делать –
Есть ли у вас примеры использования 'Formatters.Json'? Я не могу сделать «Go To Definitions» на нем, и я не получаю Intellisense в его методах перегрузки. – Matthew
Я хотел бы использовать Json.NET для создания JSON полезной нагрузки точно (Afterall , Microsoft делает для Web Api).
NuGet Пакет Источник:
Install-Package Newtonsoft.Json
Вот пример. Если вы хотите вызвать REST api, который возвращает продукт, когда вы делаете GET-вызов, вы можете сделать что-то вроде этого.
public static class Main
{
string url = "https://TheDomainYouWantToContact.com/products/1";
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "GET";
request.ContentType = "application/json";
request.Accept = "application/json";
var httpResponse = (HttpWebResponse)request.GetResponse();
var dataStream = httpResponse.GetResponseStream();
var reader = new StreamReader(dataStream);
var responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
// This is the code that turns the JSON string into the Product object.
Product productFromServer = JsonConvert.Deserialize<Product>(responseFromServer);
Console.Writeline(productFromServer.Id);
}
// This is the class that represents the JSON that you want to post to the service.
public class Product
{
public string Id { get; set; }
public decimal Cost { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
Точно такой же метод может использоваться и для POST и PUT.
Вы можете использовать сторонние сборки, чтобы сделать это очень просто. Мы авторы DynamicApis.Api
Install-Package DynamicApis.Api
код, чтобы сделать тот же самый запрос с помощью этого клиента будет:
public static class Main
{
RestClient client = new RestClient();
string url = "https://YourDomain.com/products/1";
var productFromServer = client.Get<Product>(url);
Console.Writeline(productFromServer.Id);
}
Вы не должны делать ничего особенного, чтобы отправить данные обратно JSon. Выход по умолчанию форматировщик уже Json, и если ваш Startup.cs файл несколько нормально, вы должны иметь строку, подобную этой:
services.AddMvc();
По умолчанию это уже содержит форматировщик JSon, и контроллер должен автосогласовать тип возврата в зависимости от того, что задал браузер.Таким образом, контроллер, как должно работать (из this Github issue, который содержит информацию о том, почему/как эта работа):
public class ValuesController : ApiController
{
public SomeClass Get()
{
return new SomeClass();
}
public SomeClass Post([FromBody] SomeClass x)
{
return x;
}
}
Предполагая, что этот объект Json всегда будет передан моему собственному приложению, а указанное приложение имеет API. Хотя ваш ответ работает в этом случае, он не работает во всех случаях. В этом случае JSON будет либо передан API от третьего лица, либо в ответ JavaScript AJAX. – Matthew
Тогда я в затруднении. Почему вы спрашиваете форттера Json? –
Я чувствую, что ваш вопрос пришел со слишком большим количеством багажа. Что тебе нужно сделать*? Поместить некоторые данные Json в сторонний API? Если да, то * вы должны использовать Json.Net *. –
- 1. Создание JSon в asp.net?
- 2. Создание динамического объекта json
- 3. Создание объекта JSON
- 4. JavaScript - Создание объекта JSON
- 5. Создание многоуровневого объекта JSON
- 6. Создание нового объекта JSON
- 7. создание объекта от JSON
- 8. Создание вложенного объекта JSON
- 9. Создание вложенного объекта JSON
- 10. Создание объекта json в PHP
- 11. Создание объекта JSON в Swift
- 12. создание объекта в json формате
- 13. Создание объекта для ожидания Json
- 14. Создание вложенного объекта JSON динамически?
- 15. Создание объекта JSON с массивами
- 16. Создание и заполнение объекта json
- 17. Play Json - Создание сложного объекта
- 18. Создание динамического объекта от JSON
- 19. Создание CRUD для объекта JSON?
- 20. Объекта создание JSON с springfox
- 21. Создание ArrayList из объекта JSON
- 22. symfony2 создание json из объекта
- 23. JSON Создание объекта не работает
- 24. Создание объекта Gson/JSon струнный
- 25. Создание заголовка JSON на ASP.NET
- 26. Создание json-объекта внутри объекта json с использованием php эффективно
- 27. Создание многопользовательского объекта JSON в localstorage
- 28. Создание объекта json динамически в groovy
- 29. Создание объекта json с массивом в php
- 30. Создание объекта json не удалось в Android
Это было предложено (и ответил) много раз. На мой взгляд, лучшим вариантом (производительность, функции, поддержка и т. Д.) Является использование [Json.Net] (http://www.newtonsoft.com/json). Просто добавьте его в файл bower, и вы настроены. Обратите внимание, что дублированный вопрос касается .NET 4, но по-прежнему применяется к ядру ASP.NET. –
@ LeonardoHerrera Это не дубликат. .Net 4 и .Net имеют разные пакеты, два из которых новы для .Net 5. Да, Netwonsoft для .Net 4, но два других не так, лучший способ может быть изменен для .Net 5 – Matthew
Hm. Пожалуйста, лучше сформулируйте свой вопрос: * Я не уверен, какой из них я должен использовать для создания объекта Json *, это не вопрос a/b, так как есть много вариантов. Вы * попробовали * Json.Net? –