2017-03-24 14 views
3

CamelCasePropertyNamesContractResolver를 사용해 보았지만 파스칼 속성 이름을 낙타 케이싱으로 변환하지 않습니까?파스칼 케이스 JSON 개체를 낙타의 JSON 개체로 변환하는 방법?

참고 : 이것은 단지 예일 뿐이므로 내 json 입력을 알 수 없으며 json 파스칼 케이스 만 사용합니다.

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"}} 
     } 


    } 
} 

답변

6

귀하의 예는 문자열을 serialising된다. 입력을 객체로 변환 한 다음 비 변환하면 작동합니다.

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

그러나 OP는 그의 json 입력 내용을 알 수없는 특별한 메모를 남겼습니다. – Evk

+0

좋은 점 @Evk. 그에 따라 대답을 수정했습니다. – swatsonpicken

+0

@swatsonpicken 감사합니다 ExpandoObject를 사용하여 해결했습니다! – 001

2

Humanizer는 Pascalize Camelize와 같은 기능을 갖는다. 당신은 그것을 사용하거나 단지 그들의 신비한 코드를 볼 수 있습니다. 다음되는

/// <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); 
    } 

결과 :

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

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

답변 만 링크로 남겨 두십시오. –