Binary JSON, comunemente indicato come BSON, è un formato di serializzazione simile al JSON, ma che effettua l'encoding in binario del contenuto. In alcuni casi è particolarmente efficiente, per esempio se abbiamo una grande quantità di valori numerici o dati binari come immagini, tant'è che è utilizzato come formato di serializzazione nativa da diversi prodotti, non ultimo MongoDB.
ASP.NET Web API possiede un supporto nativo a BSON, che però non è attivo di default: fortunatamente tutto ciò che dobbiamo fare per configurarlo è modificare la classe di startup aggiungendo la seguente riga di codice.
public static void Register(HttpConfiguration config) { ... config.Formatters.Add(new BsonMediaTypeFormatter()); }
Una volta che abbiamo aggiunto BsonMediaTypeFormatter, grazie alla content negotiation di ASP.NET Web API, il runtime selezionerà automaticamente questo formato quando verrà richiesto dal client. Pertanto, non dobbiamo effettuare alcuna modifica al codice dei nostri controller, che continueranno ad avere la stessa forma del passato:
public class ProductsController : ApiController { public IEnumerable<Product> Get() { return Product.GetSome(); } }
Se ProductsController viene invocato da un browser, quindi, restituirà tipicamente un contenuto di tipo JSON o XML. Nel caso di un client che specifichi BSON, invece, la serializzazione avverrà in quest'ultimo formato.
Creare un client che sfrutti BSON è altrettanto semplice, e il primo passo è quello di aggiungere il seguente package NuGet:
Install-Package Microsoft.AspNet.WebApi.Client
A questo punto, possiamo sfruttare HttpClient per inoltrare la richiesta, e BsonMediaTypeFormatter per decodificarla:
var client = new HttpClient(); // impostiamo il content type desiderato client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/bson")); var result = await client.GetAsync("http://localhost:37085/api/products"); // utilizziamo il formatter per la decodifica var formatter = new BsonMediaTypeFormatter(); var products = await result .Content .ReadAsAsync<IEnumerable<Product>>(new[] { formatter }); foreach (var product in content) { Console.WriteLine(product); }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Evitare il flickering dei componenti nel prerender di Blazor 8
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Gestire undefined e partial nelle reactive forms di Angular
Installare le Web App site extension tramite una pipeline di Azure DevOps
Recuperare un elemento inserito nella cache del browser tramite API JavaScript
Supporto ai tipi DateOnly e TimeOnly in Entity Framework Core
Miglioramenti agli screen reader e al contrasto in Angular
Utilizzare la versione generica di EntityTypeConfiguration in Entity Framework Core
Utilizzare la libreria Benchmark.NET per misurare le performance
Registrare servizi multipli tramite chiavi in ASP.NET Core 8
Utilizzare domini personalizzati gestiti automaticamente con Azure Container Apps
I più letti di oggi
- Utilizzare Docker Compose con Azure App Service
- Utilizzare QuickGrid di Blazor con Entity Framework
- Modernizzare le applicazioni WPF e Windows Forms con Blazor
- ASP 3 per esempi
- annunciato #netstandard 2.1. .NET Core lo supporterà a partire da #netcore3, così come le prossime versione di #xamarin, #mono e #unity.il supporto per #netfx 4.8, invece, non ci sarà. https://aspit.co/bq2
- Steel Style CheckBox per Silverlight 4.0