2017-03-24 6 views
3

J'ai essayé d'utiliser CamelCasePropertyNamesContractResolver, mais il ne convertit pas les noms de propriétés pascal en chameau.Comment convertir n'importe quel objet JSON pascal case en objet JSON case chameau?

Note: ceci est un exemple seulement, mon entrée json est inconnue, je seulement le boîtier json pascal.

using Newtonsoft.Json; 
using Newtonsoft.Json.Serialization; 
using System; 

namespace Example 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      object myJsonInput = @"{'Id':'123','Name':'abc'}"; //Example only, any json. 

      object myJsonOutput; 

      var jsonSerializersettings = new JsonSerializerSettings 
      { 
       ContractResolver = new CamelCasePropertyNamesContractResolver() 
      }; 

      myJsonOutput = JsonConvert.DeserializeObject<object>(myJsonInput.ToString(),jsonSerializersettings); 
      //{{"Id": "123","Name": "abc"}} 
     } 


    } 
} 

Répondre

6

Votre exemple est sérialisation une chaîne. Si vous convertissez votre entrée à un objet puis désérialisez, cela fonctionnera:

static void Main(string[] args) 
    { 
     var myJsonInput = @"{'Id':'123','Name':'abc'}"; 
     var jsonSerializerSettings = new JsonSerializerSettings 
     { 
      ContractResolver = new CamelCasePropertyNamesContractResolver() 
     }; 
     var interimObject = JsonConvert.DeserializeObject<ExpandoObject>(myJsonInput); 
     var myJsonOutput = JsonConvert.SerializeObject(interimObject, jsonSerializerSettings); 

     Console.Write(myJsonOutput); 
     Console.ReadKey(); 
    } 
+0

Mais OP a laissé une note spéciale indiquant que son entrée json est inconnue. – Evk

+0

Bon spot @Evk. J'ai modifié la réponse en conséquence. – swatsonpicken

+0

@swatsonpicken merci beaucoup, en utilisant ExpandoObject l'a résolu! – 001

2

Humanizer a des fonctions telles que Pascalize et Camelize. Vous pouvez l'utiliser ou simplement regarder leur code de sorce.

/// <summary> 
    /// By default, pascalize converts strings to UpperCamelCase also removing underscores 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    public static string Pascalize(this string input) 
    { 
     return Regex.Replace(input, "(?:^|_)(.)", match => match.Groups[1].Value.ToUpper()); 
    } 

    /// <summary> 
    /// Same as Pascalize except that the first character is lower case 
    /// </summary> 
    /// <param name="input"></param> 
    /// <returns></returns> 
    public static string Camelize(this string input) 
    { 
     var word = Pascalize(input); 
     return word.Substring(0, 1).ToLower() + word.Substring(1); 
    } 

résultats étant les suivantes:

"some_title".Pascalize() => "SomeTitle" 

"some_title".Camelize() => "someTitle" 
+1

Ne laissez pas seulement des liens comme réponse. –