Byte []作为Json中的参数

时间:2012-02-20 15:03:56

标签: c# json

这是我的json:

byte[] attachmentBytes = ZipToBase64();
string json = "{ \"method\": \"Bug.add_attachment\", " +
              "  \"params\": [ {" +
                       "  \"ids\": " + "             \"" + "25" +"\", " +
                       "  \"data\": " + "             \"" + attachmentBytes + "\", " +
                       "  \"file_name\": " + "   \"BugReport.zip\", " +
                       "  \"Bugzilla_login\": " + "  \"mymail@hotmail.com\", " +
                       "  \"Bugzilla_password\": " + "             \"mypassword\", " +
                       "  \"summary\": " + "             \"blah blah\", " +
                       "  \"content_type\": " + "   \"application/octet-stream\" " +
                              "  } ], " +
                            "\"id\": 1"
               + "}";

public static byte[] ZipToBase64()
    {
        string filePath = @"C:\Users\John\Desktop\SomeArchive.zip";
        if (!string.IsNullOrEmpty(filePath))
        {
            FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
            byte[] filebytes = new byte[fs.Length];
            fs.Read(filebytes, 0, Convert.ToInt32(fs.Length));
            string encodedData = Convert.ToBase64String(filebytes, Base64FormattingOptions.InsertLineBreaks);
            string encoded = encodedData;
            return filebytes;
        }
        return null;
    }

我认为问题出在attachmentBytes部分,因为它是一个byte []。如何在json中传递byte []?

代码在C#中。

2 个答案:

答案 0 :(得分:4)

您似乎正在尝试将byte []连接到字符串。那不行。我猜你得到的错误是关于这个连接的编译错误,对吧?

不返回byte [],而是返回Convert.ToBase64String返回的base64字符串。您可以在JSON中嵌入该字符串。

当我们讨论这个主题时,你可以通过简单地调用File.ReadAllBytes(filePath)来大幅缩短你的文件阅读量,{{1}}封装了所有的文件流业务,所以你不必这样做。

答案 1 :(得分:0)

更改ZipToBase64,以便它返回String而不是byte array

public static string ZipToBase64()
{
    string filePath = @"C:\Users\John\Desktop\SomeArchive.zip";
    if (!string.IsNullOrEmpty(filePath))
    {
        FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
        byte[] filebytes = new byte[fs.Length];
        fs.Read(filebytes, 0, Convert.ToInt32(fs.Length));
        return Convert.ToBase64String(filebytes, 
                                      Base64FormattingOptions.InsertLineBreaks);
    }
        return null;
}