为什么我的 JSON 序列化程序在将属性从 byte[] 更改为 List<byte[]> 时给出 500 错误?



我使用纯JSON输入和Base64编码上传图像。

当我使用类型为byte[]的属性时,代码工作正常

但是当我想支持一次上传多个文件并将属性更改为List<byte[]>然后我得到500个错误,如下所示

System.Private.CoreLib: Unable to cast object of type 'System.Byte[]' to type 'System.Collections.Generic.List`1[System.Byte[]]'

我假设问题在我的序列化器方法中,它看起来如下

public class Base64FileJsonConverter : JsonConverter
{
public override bool CanConvert(Type objectType)
{
return objectType == typeof(string);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader?.Value == null) return Array.Empty<byte>();
return Convert.FromBase64String(reader.Value as string);
}
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
throw new InvalidOperationException("Read only converter");
}
}
}

序列化器在输入模型上的应用如下

[ApiBodyParameter(
IsOptional = true,
Description = "List/array of BASE64 encoded image data for the item images"
)]
[JsonConverter(typeof(Base64FileJsonConverter))]
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
public List<byte[]> ResellImageBase64Data { get; set; }

我只是不知道这里有什么问题以及如何解决它?

我试着迭代数组,但我找不到正确的方法

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
if (reader?.Value == null) return Array.Empty<byte>();
var returnList = new List<byte[]>();
foreach (var image in reader.ReadAsBytes())
{
var jongel = Convert.FromBase64String(image.ToString());
returnList.Add(jongel);
}
return returnList;
}

您需要在转换器中返回List<byte[]>而不是byte[]。所以你需要在JsonReader中手动迭代数组。

你需要像

这样的东西
if (reader.TokenType == JsonToken.StartArray)
{
while (reader.Read())
{
if (reader.TokenType == JsonToken.EndArray)
break;
list.Add((string)reader.Value);
}
}