1

创建一个调用 PHP 服务器的 .Net 3.5 程序集。返回值一个 JSON 对象。JSON 对象有一个 Base64 编码的 WAV 文件(见下文)。尝试使用 Newtonsoft.Json 将 WAV 从“值”转换。花了8个小时尝试...

这是我尝试过的代码

int count = 0;
byte[] buf = new byte[8192];
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream resStream = response.GetResponseStream();
count = resStream.Read(buf, 0, buf.Length);
string json = Encoding.ASCII.GetString(buf, 0, count);

JObject jo = JObject.Parse(json);
//JObject jo = (JObject)JsonConvert.DeserializeObject(json);

这就是我卡住的地方。错误读取:

“未终止的字符串。预期的分隔符:\”。路径‘result.value’,第 1 行,位置 3449。”

几乎就像字符串太长了......

甚至还没有得到我从互联网上获取的需要调整的 Base64 转换代码

char[] base64CharArray;
inFile = new System.IO.StreamReader(inputFileName,System.Text.Encoding.ASCII);
base64CharArray = new char[inFile.BaseStream.Length];
inFile.Read(base64CharArray, 0, (int)inFile.BaseStream.Length);
base64String = new string(base64CharArray);

解决方案是周一上线第一件事......

4

1 回答 1

2

这应该可以正常工作。虽然可能不是最有效的解决方案。不要忘记关闭你的流,因为它们实现了IDisposable.
我在WebClient这里使用,但实际上并没有什么不同。我认为HttpWebRequest在这种情况下这是多余的。

            WebClient client = new WebClient();
            Stream stream = client.OpenRead("http://waps.repli-con.com/services/ivrservices/getUserNameRecording/10000");
            StreamReader reader = new StreamReader(stream);

            JToken token = JObject.Parse(reader.ReadToEnd().ToString());

            string base64string = token.SelectToken("result").SelectToken("value").ToString();
            Byte[] b = Convert.FromBase64String(base64string);
            System.IO.File.WriteAllBytes(@"C:\Users\user\Desktop\test.wav", b);   
            stream.Close();
于 2013-03-24T00:58:45.910 回答