È possibile modificare la serializzazione predefinita di C# poco per documentDb? La proprietà id, ad esempio, sembra essere richiesta per essere minuscola, ma la serializzazione predefinita della proprietà Id è maiuscola. Idealmente vorremmo che tutte le proprietà di JSON iniziassero con caratteri minuscoli. L'unico modo che abbiamo trovato finora è quello di decorare le proprietà con [JsonProperty (PropertyName = "id")] ma non è molto elegante.Serializzazione personalizzata di C# poco per DocumentDb
risposta
Ecco un paio di modi per ottenere minuscole o in cammello caso nel documento DocumentDB:
Usa
[JsonProperty(PropertyName = "id")]
come lei ha ricordato.Modificare la proprietà C# nel POCO in lettere minuscole.
avere il vostro POCO estendono
Microsoft.Azure.Documents.Document
dal DocumentDB .NET Library, che ha una proprietà Id (che credo utilizza[JsonProperty(PropertyName = "id")]
dietro le quinte).Invece di utilizzare il serializzatore predefinito, è possibile utilizzare la libreria Json.NET per la serializzazione utilizzando il suo resolver di tipo cammello. Mats Karlsson ha un buon post sul blog su questo qui: http://www.matskarlsson.se/blog/serialize-net-objects-as-camelcase-json
Edit: impostazioni serializzatore JSON è supportato nella DocumentDB .NET SDK 1.16.0+. https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-sdk-dotnet
Ciao aliuy, La domanda non è su come serializzare in caml-case usando Json.NET ma piuttosto come cambiare il serializzatore predefinito per documentDb. –
Ah, mi dispiace - rivisto la mia risposta! –
Mentre ero in grado di modificare la serializzazione predefinita in Json.NET (impostando JsonConvert.DefaultSettings) e salvare i nomi delle proprietà in caso cammello, la query non funzionava. Immagino che DocumentDb usi il confronto case-sensitive sui nomi di proprietà. Quindi in una query obj.Id == document.id, gli ID non corrisponderanno. –
Attualmente non è possibile modificare il serializzatore predefinito di DocumentDB, tuttavia è possibile serializzare utilizzando la propria libreria o JSON.NET e memorizzare la stringa JSON alla raccolta facendo:
await client.CreateDocumentAsync(collectionLink, Resource.LoadFrom<Document>(stream));
dove torrente un flusso verso la stringa json (può essere da un file o da una stringa in memoria, ecc.). Potete trovare maggiori informazioni sul internet archive's edition of my blog post, che used to reside here
Edit: impostazioni serializzatore JSON è supportato nella DocumentDB .NET SDK 1.16.0+. https://docs.microsoft.com/en-us/azure/cosmos-db/sql-api-sdk-dotnet
link è rotto :( –
@CarlosG.risolto –
Anche se il client supporta le impostazioni di serializzazione personalizzate, il provider linq sembra ignorarlo. –
La possibilità di impostare le impostazioni di JsonSerialization sull'API DocumentDB SDK è attualmente in fase di sviluppo da parte del team di Azure, quindi dovrebbe essere disponibile in futuro in alcuni punti: https://feedback.azure.com/forums/263030 -documentdb/suggerimenti/6422364-allow-me-to-set-jsonserializersetting – abrown