DocumentDB è il database documentale offerto dalla piattaforma Microsoft Azure per memorizzare, indicizzare e recuperare documenti JSON. L'infrastruttura supporta protocolli standard e dispone di SDK nei linguaggi più utilizzati del momento. Tra questi c'è anche C# e in generale .NET attraverso una libreria NuGet che ci permette facilmente di lavorare con DocumentDB.
La libreria client ci permette di lavorare sui documenti in maniera del tutto tipizzata lavorando sotto le quinte con JSON.NET, il quale si occupa automaticamente della serializzazione e della deserializzazione. Purtroppo la libreria non supporta ancora un modello aperto che ci permetta di personalizzare gli aspetti della serializzazione e ci troviamo quindi a dover scegliere tra due strade:
- Utilizzare le impostazioni globali di JSON.NET: la pratica può interferire con altri meccanismi in JSON utilizzati all'interno dell'applicazione, quindi è una soluzione poco efficace oltre che non elegante;
- Caricare manualmente lo stream JSON: ci occupiamo noi della serializzazione e deserializzazione grezza.
Questa seconda strada è oggetto di questo script. Per farlo, bastano pochi passi anche se vuol dire rinunciare alla comodità della totale trasparenza della conversione in JSON. Il metodo CreateDocumentAsync, infatti, oltre all'oggetto tipizzato, permette di passare un Resource
// Creo lo stream in memoria using (var stream = new MemoryStream()) { // Creo del finto json come stringa var writer = new StreamWriter(stream); writer.Write("{json:'test'}"); writer.Flush(); // Riporto lo stream all'inizio stream.Position = 0; // Creo il documento partendo dallo Stream await client.CreateDocumentAsync(collectionLink, Resource.LoadFrom<Document>(stream)); }
In questo modo abbiamo massima libertà nella serializzazione dei nostri oggetti, non dipendendo più da JSON.NET.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Utilizzare WebJobs su Linux con Azure App Service
Gestione CSS in Blazor con .NET 9
Montare Azure Blob Storage su Linux con BlobFuse2
Testare il failover sulle region in Azure Storage
Documentare i servizi REST con Swagger e OpenAPI con .NET 9
Il nuovo controllo Range di Blazor 9
Popolare una classe a partire dal testo, con Semantic Kernel e ASP.NET Core Web API
Fornire parametri ad un Web component HTML
Usare i servizi di Azure OpenAI e ChatGPT in ASP.NET Core con Semantic Kernel
Creare una libreria CSS universale - Rotazione degli elementi
Anonimizzare i dati sensibili nei log di Azure Front Door
Utilizzare DeepSeek R1 con Azure AI
I più letti di oggi
- Microsoft Security Bulletin MS04-004
- Nuovo managed provider ADO.NET per MySQL
- Parte il test del SP2 di Windows Server 2003
- Dependency injection in ASP.NET MVC 5 con Ninject
- Impostare la culture per la client side validation di ASP.NET MVC 5
- API di #Cassandra supportate direttamente da #CosmosDB, che si aggiunge alle API per #MongoDB, #DocumentDB, Table Storage, Spark e Gremlin Graph #Azure #MSFTConnect
- ecco tutte le novità pubblicate sui nostri siti questa settimana: https://aspit.co/wkly buon week-end!
- Utilizzare politiche di resiliency con Azure Container App
- Caricamento differito di assembly o di porzioni di progetto in Silverlight 2.0