将代表UCHAR数组的json字符串响应转换为Byte数组

时间:2019-08-16 16:24:34

标签: c# arrays json-rpc

我正在调用json-rpc api,该api返回代表PDF文件的UCHAR数组(因此返回的result属性包含UCHAR数组的字符串表示形式)。我需要将此结果字符串转换为Byte数组,以便可以将其处理为PDF文件,即保存和/或将其作为文件在POST中转发到另一个api。

我尝试了以下操作(结果变量是返回的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文件时,它不会打开,可能是因为未正确转换。

2 个答案:

答案 0 :(得分:0)

您知道文件编码格式吗?尝试使用此

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

编辑:

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

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

答案 1 :(得分:0)

结果表明,尽管API函数的输出是UCHAR,但当它作为JSON字符串的一部分出现时,它是base64字符串,因此这对我有用:

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

我很确定API会在“幕后”进行转换,即被调用的函数返回UCHAR时,api使用的是框架来创建JSON-RPC响应,并且很可能会执行转换后再发送出去。如果是.NET进行了从UCHAR到base64的转换,请随意输入并确认。