如何在C# MessageBox中展示HTTP POST请求返回的JSON数据?
解决C# MessageBox展示JSON数组中Name和Amount的问题
问题原因
- 原代码错误地直接从JSON根节点获取
Name和Amount,但这两个字段实际嵌套在values数组的子对象中 - 冗余代码
JsonConvert.DeserializeObject<StreamReader>(responseContent);无意义,应删除
解决方案
通过解析JSON中的values数组,遍历提取每个对象的Name和Amount,拼接成你需要的文本格式后在MessageBox中展示。
实现示例1格式(对齐文本)
using (WebResponse response = request.GetResponse()) using (Stream stream = response.GetResponseStream()) using (StreamReader sr99 = new StreamReader(stream)) { string responseContent = sr99.ReadToEnd(); JObject json = JObject.Parse(responseContent); // 提取values数组 JArray valuesArray = (JArray)json["values"]; StringBuilder resultText = new StringBuilder(); foreach (JObject item in valuesArray) { string name = (string)item["Name"]; string amount = (string)item["Amount"]; // 用PadRight保证名称列宽度一致,实现对齐 resultText.AppendLine($"{name.PadRight(6)} : {amount}"); } MessageBox.Show(resultText.ToString()); }
实现示例2格式(文本模拟表格)
using (WebResponse response = request.GetResponse()) using (Stream stream = response.GetResponseStream()) using (StreamReader sr99 = new StreamReader(stream)) { string responseContent = sr99.ReadToEnd(); JObject json = JObject.Parse(responseContent); JArray valuesArray = (JArray)json["values"]; StringBuilder resultText = new StringBuilder(); // 添加表头和分隔线 resultText.AppendLine("| Name | Amount |"); resultText.AppendLine("|--------|--------|"); foreach (JObject item in valuesArray) { string name = (string)item["Name"]; string amount = (string)item["Amount"]; resultText.AppendLine($"| {name.PadRight(5)} | {amount.PadRight(6)} |"); } MessageBox.Show(resultText.ToString()); }
额外说明
- 使用
StringBuilder拼接字符串比直接用+更高效,尤其数据量较大时 PadRight方法用于固定列宽,让文本展示更整齐- 若需要真正的网格控件展示,MessageBox无法实现,可自定义弹窗窗体,添加
DataGridView并绑定数据
内容的提问来源于stack exchange,提问作者Cincri5932
相关产品推荐
相关产品推荐

