7

良い一日!

現在、次のコードで Newtonsoft Json Serializer を使用しています。

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

オブジェクトをシリアル化する必要があるたびに、'serializeAndIgnoreEmail' メソッドを呼び出します。各プロパティのコンテンツを暗号化されたバージョンに置き換えたいのですが、どこでこれを行うべきかわかりません。

私の推測では、「DocumentIdContractResolver」のメソッドをオーバーライドすることになりますが、非常に多くの CreateBlahBlahBlah があるため、それらを操作するのは非常に困難です。

これは、ContractResolver の変更を続行するための正しいアプローチですか、それとも何か他の方法を試す必要がありますか?

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

4

2 に答える 2

8

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

最善の策は、2 つのステップを別々に実行することです。まず、JSON.NET に JSON トークンのツリーを提供するように依頼し、次に値を変更してから、それらを 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);
        }
    }
}
于 2013-08-08T11:06:09.017 に答える
1

私はまったく同じことをしていません。しかし、Web API プロジェクトの場合、数値ではなく列挙値の文字列名をシリアル化する必要がありました。少し調べてみたところ、Json フォーマッター コンバーターはデフォルトでは空であることがわかりました。だから私は追加しました:

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

あなたの場合、カスタム JsonConverter を作成し、それをコンバーターのリストに追加する必要があります。ここで同様の例を見つけることができます:

カスタム JSON コンバーター

于 2013-10-16T06:04:04.283 に答える