Json .NET序列化 - 更改属性值

ton*_*yes 5 c# json json.net

美好的一天!

我目前通过以下代码使用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();
            }
        }
Run Code Online (Sandbox Code Playgroud)

每次我需要序列化一个对象时,我都会调用'serializeAndIgnoreEmail'方法.我现在想用它的加密版本替换每个属性的内容,我不知道在哪里这样做.

我的猜测是覆盖'DocumentIdContractResolver'中的一个方法,但是有很多CreateBlahBlahBlah,我觉得很难使用它们.

这是正确的方法,继续修改ContractResolver还是我应该尝试别的?

谢谢!

Dav*_*nde 7

调用SerializeObject做两件事:根据您指定的对象创建一个JSON令牌树,并将其序列化为包含JSON的字符串.

最好的办法是分别执行以下两个步骤:首先让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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)