You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中获取无空白字符的JSON格式WebResponse?

解决JSON序列化后仍保留空白的问题

你的问题根源在于API返回的响应本身是一个被包裹在字符串里的JSON,而非直接的JSON对象。当前代码把这个带引号的字符串反序列化后得到的其实是string类型,后续再序列化时只是对这个字符串做转义输出,所以Formatting.None完全不起作用。

修复代码方案

直接解析内层的JSON内容,再重新序列化即可:

System.Net.WebResponse resp = req.GetResponse();
string content;

using(System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream())) 
{
    content = sr.ReadToEnd();
}

// 第一步:先解析外层的字符串,得到内部的JSON文本
string innerJson = JsonConvert.DeserializeObject<string>(content);
// 第二步:解析内部JSON为对象
dynamic parsedJson = JsonConvert.DeserializeObject(innerJson);
// 第三步:用Formatting.None序列化得到无空白的JSON
content = JsonConvert.SerializeObject(parsedJson, Newtonsoft.Json.Formatting.None);

或者用更简洁的JToken处理(兼容API直接返回JSON对象的情况):

System.Net.WebResponse resp = req.GetResponse();
string content;

using(System.IO.StreamReader sr = new System.IO.StreamReader(resp.GetResponseStream())) 
{
    content = sr.ReadToEnd();
}

JToken token = JToken.Parse(content);
// 如果是字符串类型,取出内层JSON再解析
if (token.Type == JTokenType.String)
{
    token = JToken.Parse(token.Value<string>());
}
// 直接输出无空白的JSON
content = token.ToString(Newtonsoft.Json.Formatting.None);

为什么原来的代码无效?

你拿到的content是类似"{ \t\"Success\": \"true\", ... }"的字符串——它本质是一个JSON字符串值,而非JSON对象。当你用JsonConvert.DeserializeObject(content)反序列化时,得到的是一个string类型的dynamic变量。此时调用SerializeObject,只是把这个字符串原样转义输出,Formatting参数只对JSON对象/数组的序列化生效,对字符串类型完全不产生影响,所以不管用None还是Indented,输出结果都一样。

内容的提问来源于stack exchange,提问作者Deep Thumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 18:08:27