2015-11-17 2 views
0

Les dernières modifications après avoir réalisé que la question semble être dans la bibliothèque RavenDB au lieu de la bibliothèque json.netsérialisation types anonymes avec json.net Semble cassé

Jusqu'à présent, j'ai toujours utilisé ce morceau de code à sérialiser anonyme types:

using Raven.Imports.Newtonsoft.Json; 

var anon = new { errors = new string[] { "Login error" } }; 
var settings = new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }; 
var str = JsonConvert.SerializeObject(anon, Formatting.None, settings); 

Il était avec json.net intégré à l'intérieur de RavenDb 2.x.

Récemment, j'ai commencé un nouveau projet. Il utilise le dernier RavenDb 3.x.

Maintenant, quand je sérialiser un type anonyme, je reçois d'autres champs dans la chaîne de résultats, par ex:

{"<errors>i__Field":["Login error"],"errors":["Login error"]} 

Merci

+0

Qu'est-ce que la classe anonyme que vous essayez de sérialisation ressembler? –

+0

mis à jour mon exemple de code avec un exemple de données. –

+0

Le nom de votre variable de paramètres est 'settings'. Vous passez un nom différent ('Settings' avec un' S' majuscule) à 'SerializeObject'. Est-ce une faute de frappe dans votre code actuel, ce qui signifie que d'autres paramètres sont utilisés que ceux que vous avez spécifiés, ou est-ce une faute de frappe dans votre question? Si c'est une faute de frappe dans votre question, alors mettre votre code dans une nouvelle application de console avec la version exacte de Json.NET que vous avez spécifié ne montre pas le comportement que vous décrivez, alors dans ce cas, mettez le code approprié pour montrer le problème. – hvd

Répondre

0

Il a été modifié en RavenDB 3.x. Donc, il y a 2 solutions:

  • Fiez-vous à la place bibliothèque Json.net
  • Ou personnaliser les paramètres comme ceci:

    ContractResolver = new CamelCasePropertyNamesContractResolver() {DefaultMembersSearchFlags = System.Reflection.BindingFlags. Public | System.Reflection.BindingFlags.Instance}

(notez que DefaultMembersSearchFlags est marquée comme obsolète)