将表示 CHAR 数组的 json 字符串响应转换为字节数组

Convert json string response representing UCHAR array to Byte array

我正在调用一个 json-rpc api,它 return 是一个表示 PDF 文件的 UCHAR 数组(所以结果 属性 在 return 包含 UCHAR 数组的字符串表示形式)。我需要将此结果字符串转换为字节数组,以便我可以将其作为 PDF 文件处理,即,将其保存 and/or 将其作为 POST 中的文件转发到另一个 api。

我尝试了以下方法(结果变量是 returned UCHAR 字符串):

char[] pdfChar = result.ToCharArray();
byte[] pdfByte = new byte[pdfChar.Length];
for (int i = 0; i < pdfChar.Length; i++)
{
    pdfByte[i] = Convert.ToByte(pdfChar[i]);
}
File.WriteAllBytes(basePath + "test.pdf", pdfByte);

我也试过:

byte[] pdfByte = Encoding.ASCII.GetBytes(pdfObj.result);
File.WriteAllBytes(basePath + "test.pdf", pdfByte);

有了这两个,当我尝试打开生成的 test.pdf 文件时,它打不开,大概是因为它没有正确转换。

你知道文件编码格式吗?尝试使用这个

return System.Text.Encoding.UTF8.GetString(pdfObj.result)

编辑:

您找到的解决方案也已报告here

var base64EncodedBytes = System.Convert.FromBase64String(pdfObj.result);
return System.Text.Encoding.UTF8.GetString(base64EncodedBytes)

事实证明,虽然 API 函数的输出是 UCHAR,但当它作为 JSON 字符串的一部分出现时,它是一个 base64 字符串,所以这对我有用:

byte[] pdfBytes = Convert.FromBase64String(pdfObj.result);

我很确定 API 正在进行转换 "under the hood",即,当函数被调用 returns UCHAR 时,api 正在使用一个框架创建 JSON-RPC 响应,并且很可能在发送之前执行转换。如果是 .NET 将 UCHAR 转换为 base64,那么请随意插话并确认这一点。