VB.NET构建JSON字符串遇重复双引号问题求助
VB.NET中正确构造JSON字符串的方法
方法一:直接转义双引号
VB.NET中,字符串里的单个双引号需要用两个连续双引号来转义,编译器会自动将其解析为单个双引号。直接按此规则构造你的JSON:
Dim jsonContent As String = " { ""BoundaryType"": ""Outside"", ""StartTime"": ""2022-12-07T00:00:00"", ""EndTime"": ""2022-12-08T00:00:00"", ""TagFilter"": ""atagname"", ""Delimiter"":"""", ""ServerName"": ""aservername"" }"
方法二:使用逐字字符串(Verbatim String)
用@前缀标记逐字字符串,字符串里的换行、空格会被原样保留,双引号同样用两个连续双引号表示单个,可读性更强:
Dim jsonContent As String = @" { ""BoundaryType"": ""Outside"", ""StartTime"": ""2022-12-07T00:00:00"", ""EndTime"": ""2022-12-08T00:00:00"", ""TagFilter"": ""atagname"", ""Delimiter"":"""", ""ServerName"": ""aservername"" }"
方法三:通过类序列化生成JSON(推荐)
手动拼接字符串容易出错,更可靠的方式是定义对应的数据模型,用JSON序列化工具自动生成字符串:
- 先定义匹配JSON结构的类:
Imports System.Text.Json Public Class RequestParams Public Property BoundaryType As String Public Property StartTime As String Public Property EndTime As String Public Property TagFilter As String Public Property Delimiter As String Public Property ServerName As String End Class
- 实例化类并序列化:
Dim requestModel As New RequestParams With { .BoundaryType = "Outside", .StartTime = "2022-12-07T00:00:00", .EndTime = "2022-12-08T00:00:00", .TagFilter = "atagname", .Delimiter = "", .ServerName = "aservername" } Dim jsonContent As String = JsonSerializer.Serialize(requestModel)
关于你遇到的重复双引号问题
你用!替换再转成Chr(34)的方法绕了弯路,且容易因为字符串定义时的隐性转义导致重复。VB.NET中如果直接写"!",替换后是单个双引号,但如果初始字符串里不小心包含了转义的双引号(即""),替换后就会变成""",最终出现重复。而Visual Studio文本可视化工具会自动将两个连续双引号显示为单个,导致你误以为内容正常,但实际字符串里是重复的双引号,传入函数就会出错。
内容的提问来源于stack exchange,提问作者Paul Johnson
相关产品推荐
相关产品推荐

