C# 自定义bool JSON序列化转换

该篇文章介绍了如何使用Newtonsoft.Json库中的CustomCreationConverter类创建一个自定义转换器,以处理是否、0、1等非标准格式的JSON数据,并将其转换为布尔值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用 Newtonsoft.Json 自定义转换器 将 是 否、0、1,true ,false ,yes no on off 等格式的json数据转换成bool

internal class BoolConverter : CustomCreationConverter<bool>
{
    public override bool Create(Type objectType)
    {
        return true;
    }
    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        if (reader.TokenType == Newtonsoft.Json.JsonToken.Null)
            return false;
        try
        {
            string str = reader.Value.ToString().ToLower();
            return str.Equals("true") ||
                str.Equals("1") ||
                str.Equals("yes") ||
                str.Equals("on") ||
                str.Equals("是");
        }
        catch
        {
            return false;
        }
    }
}

自定义转换器可以转换多种json格式的bool数据,使用以上方法也可以将各种自定义格式的数据进行转换

C#中,`Newtonsoft.Json`是一个流行的JSON处理库,它可以帮助我们序列化和反序列化数据。如果你想要加密后再进行保存,可以按照以下步骤操作: 1. 首先,安装Json.NET库,如果尚未安装,可以在NuGet包管理器中搜索并安装`Newtonsoft.Json`。 2. 创建一个自定义的JavaScriptSerializer实例,并配置加密功能。你可以使用如`RijndaelManaged`或`AesCryptoServiceProvider`等.NET加密算法对数据进行加密。例如: ```csharp using System.IO; using System.Security.Cryptography; using Newtonsoft.Json; public class EncryptedJsonConverter : JsonConverter<EncryptedString> { private readonly JsonSerializerSettings _settings; public EncryptedJsonConverter(JsonSerializerSettings settings) { _settings = settings; } public override void WriteJson(JsonWriter writer, EncryptedString value, JsonSerializer serializer) { var plaintext = Encoding.UTF8.GetBytes(value.Value); using (var aes = Aes.Create()) { aes.Key = Convert.FromBase64String("your_secret_key_here"); aes.IV = Convert.FromBase64String("your_initialization_vector_here"); // Encrypt the data var encryptedData = Encrypt(plaintext, aes); writer.WriteStartObject(); writer.WritePropertyName("encrypted_data"); writer.WriteValue(Convert.ToBase64String(encryptedData)); writer.WriteEndObject(); } } public override EncryptedString ReadJson(JsonReader reader, Type objectType, EncryptedString existingValue, bool hasExistingValue, JsonSerializer serializer) { var encryptedData = reader.Value as string; if (encryptedData != null) { byte[] decryptedData; using (var aes = Aes.Create()) { aes.Key = Convert.FromBase64String("your_secret_key_here"); aes.IV = Convert.FromBase64String("your_initialization_vector_here"); decryptedData = Decrypt(Convert.FromBase64String(encryptedData), aes); } return new EncryptedString(Encoding.UTF8.GetString(decryptedData)); } else { return default(EncryptedString); } } private static byte[] Encrypt(byte[] data, Aes aes) { var encryptor = aes.CreateEncryptor(aes.Key, aes.IV); using (var ms = new MemoryStream()) { using (var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write)) { cs.Write(data, 0, data.Length); cs.FlushFinalBlock(); } return ms.ToArray(); } } private static byte[] Decrypt(byte[] data, Aes aes) { var decryptor = aes.CreateDecryptor(aes.Key, aes.IV); using (var ms = new MemoryStream(data)) { using (var cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read)) { return cs.ToArray(); } } } } ``` 这里假设有一个名为`EncryptedString`的简单包装类,用于包含加密的数据值: ```csharp public class EncryptedString { public string Value { get; set; } } ``` 然后在序列化和反序列化时,可以这样做: ```csharp string json = JsonConvert.SerializeObject(someObject, new JsonSerializerSettings { converters = new[] { new EncryptedJsonConverter() } }); // 存储加密后的json var deserializedObject = JsonConvert.DeserializeObject<MyClass>(json, new JsonSerializerSettings { converters = new[] { new EncryptedJsonConverter() } }); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值