如何在JSON字符串中正确写入TextBox值?(附报错代码)
问题分析&靠谱解决方案
兄弟,你这明显是手动拼JSON踩格式坑了!咱们来捋清楚问题和解决办法:
你的代码里有俩致命问题:
txtName.Text没加引号直接拼进去,JSON解析器根本认不出这是字符串值;- JSON标准要求所有键和字符串值必须用双引号,你用单引号的话,大部分解析器都会报错。
而且手动拼JSON真的是给自己挖坑——万一用户输入个带双引号、反斜杠的内容,直接就把JSON搞崩了,还可能有注入风险。给你俩方案,优先选第二种哈:
方案1:临时救急的手动拼接修正
要是实在想先凑合用手动拼接,得给txtName.Text套上双引号,同时把所有单引号换成双引号(注意转义):
// 用转义双引号的写法 string json = @"{""MemberName"":""" + txtName.Text + @""", ""MemberEmail"":""mack@mack.com"", ""MemberPassword"":""111""}";
或者用C# 6+支持的字符串插值,看着更清楚:
string json = $"{{\"MemberName\":\"{txtName.Text}\", \"MemberEmail\":\"mack@mack.com\", \"MemberPassword\":\"111\"}}";
但还是那句话,这种方式治标不治本,遇到特殊字符照样炸。
方案2:用序列化生成JSON(强烈推荐)
直接用.NET的序列化库生成JSON,既安全又省心,还不用自己抠格式。
方法A:用.NET内置的System.Text.Json(.NET Core 3.0+/NET 5+可用)
先整个实体类对应你的JSON结构:
public class MemberInfo { public string MemberName { get; set; } public string MemberEmail { get; set; } public string MemberPassword { get; set; } }
然后实例化对象再序列化:
var member = new MemberInfo { MemberName = txtName.Text, MemberEmail = "mack@mack.com", MemberPassword = "111" }; string json = System.Text.Json.JsonSerializer.Serialize(member);
方法B:用Newtonsoft.Json(Json.NET,老项目常用)
如果是.NET Framework或者习惯用Json.NET,先去NuGet装Newtonsoft.Json包,然后同样搞实体类,再序列化:
var member = new MemberInfo { MemberName = txtName.Text, MemberEmail = "mack@mack.com", MemberPassword = "111" }; string json = Newtonsoft.Json.JsonConvert.SerializeObject(member);
这种方式会自动帮你处理所有特殊字符的转义,绝对不会出格式问题,以后要加字段也方便维护。
内容的提问来源于stack exchange,提问作者Jitender
相关产品推荐
相关产品推荐

