2017-03-24 22 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

あなたの例では、文字列を直列化されます。入力をオブジェクトに変換してデシリアライズすると、正常に動作します。

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には、「パスカルズ」や「キャメライズ」などの機能があります。あなたはそれを使うことができますか、またはそれらのコードを見るだけです。

/// <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

リンクは回答として残さないでください。 –

関連する問題