2013-08-08 9 views
5

おはよう!Json .NETシリアル化 - プロパティ値を変更

私は現在、次のコードをNewtonsoft JSONシリアライザを使用しています:私は「serializeAndIgnoreEmail」メソッドを呼び出すオブジェクトをシリアル化する必要が

 private string serializeAndIgnoreEmail(UserMembership obj) 
     { 
      var json = JsonConvert.SerializeObject(obj, Formatting.Indented, 
       new JsonSerializerSettings() { ContractResolver = new DocumentIdContractResolver() }); 
      return json; 
     } 
     private class DocumentIdContractResolver : CamelCasePropertyNamesContractResolver 
     { 
      protected override List<MemberInfo> GetSerializableMembers(Type objectType) 
      { 
       return base.GetSerializableMembers(objectType).Where(o => o.Name != "Email").ToList(); 
      } 
     } 

毎回。私は今、各プロパティの内容を暗号化されたバージョンに置き換えたいと思います。私はこれをどこで行うべきかわかりません。

私は、 'DocumentIdContractResolver'のメソッドをオーバーライドすることになりますが、非常に多くのCreateBlahBlahBlahのメソッドがあり、それらを扱うのが非常に難しいと思います。

これは適切な方法で、ContractResolverの修正を続けるか、他に何か試してみるべきですか?

ありがとうございました!

答えて

7

SerializeObjectを呼び出すと、指定したオブジェクトに基づいてJSONトークンのツリーを作成し、それをJSONを含む文字列にシリアル化します。

JSONトークンのツリーを提供するようにJSON.NETに依頼してから、値を変更してJSONにシリアル化してください。私の頭の上から

namespace JsonEncryptionTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var obj = new 
       { 
        To = "Some name", 
        Subject = "A Subject", 
        Content = "A content" 
       }; 

      var jsonObject = JObject.FromObject(obj); 

      // modify the values. Just doing something here to amuse you. 
      var property = jsonObject.Property("Content"); 
      var value = (string) property.Value; 
      property.Value = value.ToLower(); 

      var json = jsonObject.ToString(); 

      Console.WriteLine(json); 
     } 
    } 
} 
1

私はまったく同じことを行っていません。しかし私のWeb APIプロジェクトでは、数値の代わりに列挙型の列名をシリアル化する必要がありました。私は少しの研究を行い、Jsonフォーマッタコンバータがデフォルトで空であることに気付きました。そこで、私は次のように追加しました。

config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter()); 

あなたのケースでは、カスタムJsonConverterを作成してコンバータのリストに追加する必要があります。同様の例がここにあります:

Custom Json Converter

関連する問題