2014-09-16 9 views
5

È 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

+0

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

risposta

1

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

+0

Ciao aliuy, La domanda non è su come serializzare in caml-case usando Json.NET ma piuttosto come cambiare il serializzatore predefinito per documentDb. –

+0

Ah, mi dispiace - rivisto la mia risposta! –

+1

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. –

4

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

+2

link è rotto :( –

+1

@CarlosG.risolto –

+0

Anche se il client supporta le impostazioni di serializzazione personalizzate, il provider linq sembra ignorarlo. –

Problemi correlati