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

C# Json.NET序列化-更改属性值,c#,json,json.net,C#,Json,Json.net,你好 我目前通过以下代码使用Newtonsoft Json序列化程序: private string serializeAndIgnoreEmail(UserMembership obj) { var json = JsonConvert.SerializeObject(obj, Formatting.Indented, new JsonSerializerSettings() { ContractResol

你好

我目前通过以下代码使用Newtonsoft Json序列化程序:

        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();
            }
        }
private string序列化和gnoreemail(UserMembership obj)
{
var json=JsonConvert.SerializeObject(obj,Formatting.Indented,
新JsonSerializerSettings(){ContractResolver=new DocumentIdContractResolver()});
返回json;
}
私有类DocumentIdContractResolver:CamelCasePropertyNamesContractResolver
{
受保护的覆盖列表GetSerializableMembers(类型objectType)
{
返回base.GetSerializableMembers(objectType).Where(o=>o.Name!=“Email”).ToList();
}
}
每次我需要序列化一个对象时,我都调用“SerializeAndInoReemail”方法。我现在想用它的加密版本替换每个属性的内容,但我不知道在哪里可以这样做

我的猜测是重写“DocumentIdContractResolver”中的一个方法,但是有太多的CreateBlahBlahBlah方法,我发现使用它们非常困难

这是继续修改ContractResolver的正确方法,还是应该尝试其他方法


谢谢大家!

调用
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);
        }
    }
}

我没有做过完全相同的事情。但在我的web API项目中,我需要序列化枚举值的字符串名称,而不是它们的数值。我做了一些研究,发现Json格式转换器在默认情况下是空的。所以我补充说:

config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter());
在您的情况下,您需要编写一个自定义JsonConverter并将其添加到转换器列表中。您可以在此处找到类似的示例: