C#中如何将含byte[]的模型序列化为JSON且不转Base64字符串
解决.NET中byte[]序列化为JSON数字数组的问题
默认情况下,.NET的JsonSerializer会将byte[]类型序列化为Base64字符串,要实现将其转为数字数组的需求,你可以自定义一个JSON转换器:
步骤1:自定义byte[]转换器
创建一个继承自JsonConverter<byte[]>的类,重写序列化逻辑:
public class ByteArrayToJsonArrayConverter : JsonConverter<byte[]> { public override byte[] Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options) { // 反序列化逻辑(如需支持反序列化可保留) if (reader.TokenType != JsonTokenType.StartArray) throw new JsonException("byte[]反序列化时需传入数组格式JSON"); var byteList = new List<byte>(); while (reader.Read() && reader.TokenType != JsonTokenType.EndArray) { if (reader.TokenType != JsonTokenType.Number) throw new JsonException("byte[]数组元素需为数字类型"); byteList.Add((byte)reader.GetInt32()); } return byteList.ToArray(); } public override void Write(Utf8JsonWriter writer, byte[] value, JsonSerializerOptions options) { // 序列化时把byte[]转为数字数组 writer.WriteStartArray(); foreach (byte b in value) { writer.WriteNumberValue(b); } writer.WriteEndArray(); } }
步骤2:配置序列化选项并执行序列化
在序列化时,将自定义转换器添加到JsonSerializerOptions中:
MyModel myObject = new MyModel { Id = 1, Data = new byte[] { 0x01, 0x02, 0x03 } }; var options = new JsonSerializerOptions(); options.Converters.Add(new ByteArrayToJsonArrayConverter()); string json = JsonSerializer.Serialize(myObject, options); // 输出结果:{"Id":1,"Data":[1,2,3]}
补充:PowerShell代码翻译
你提供的PowerShell代码功能及注释翻译如下:
# 将证书库对象转换为压缩格式的JSON字符串 $CertificateJsonString = ConvertTo-Json $CertificateVaultObject -Compress # 将JSON字符串转换为安全字符串(以明文形式处理) $CertificateSecureString = ConvertTo-SecureString -String $CertificateJsonString -AsPlainText –Force
内容的提问来源于stack exchange,提问作者Lifewithsun
相关产品推荐
相关产品推荐

