Intenté usar CamelCasePropertyNamesContractResolver, sin embargo, ¿no convierte los nombres de propiedad de Pascal en carcasa de camello?
Nota: este es solo un ejemplo, mi entrada json es desconocida, solo tengo la carcasa 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"}} } } }Su ejemplo es serializar una cadena. Si convierte su entrada en un objeto y luego deserializa, funcionará:
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(); }Humanizer tiene funciones como Pascalize y Camelize. Puedes usarlo o simplemente mirar su código fuente.
/// <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); }Los resultados son los siguientes:
"some_title".Pascalize() => "SomeTitle" "some_title".Camelize() => "someTitle"