【发布时间】:2022-01-06 16:39:44
【问题描述】:
我已经尝试了所有方法,但似乎无法将变量放入某些文本中。我认为问题在于测试是 JSON 格式。我试图将一个变量从 UI 中的文本框传递给这个变量,但是为了测试我刚刚创建了一个局部变量,如下所示。这是我的代码:
变量:
string Repo1 = "jamesbennett12345678990";
字符串我正在尝试将我的变量添加到:
var UserAgent1 = new ProductInfoHeaderValue("ScraperBot", "1.0");
request.Headers.TryAddWithoutValidation("Authorization", "token testtesttesttest");
request.Headers.UserAgent.Add(UserAgent1);
//String here
request.Content = new StringContent("{\"name\":\"{Repo1}\"}");
我已经读过,要做到这一点,只需在变量周围加上花括号,但它不起作用。我知道这一点是因为行 - string Repo1 = "jamesbennett12345678990";表示该变量未使用。
这部分是使用 HTPClient 传递的 JSON 数据,所以我在想,因为已经有用反斜杠转义的语音标记,这里可能存在格式问题 ---- ("{"name":"{Repo1 "}")
我没有任何错误,只有 VS 中的一个说
var string Repo1 = "jamesbennett12345678990";
实际上并未使用。
我还研究了字符串插值。
【问题讨论】:
-
您将 C# 插值字符串
$"foo {bar} baz"与 JSON 语法混淆了。 -
您只需在文本前添加美元符号:
new StringContent($"\{\"name\":\"{Repo1}\"\}");并转义不代表变量的花括号。 -
如果你想手动形成你的json,考虑
new StringContent($@"{{""name"":""{Repo1}""}}");。如果你想得到一个序列化器来形成它,JsonConvert.SerializeObject(new{name=Repo1});(Newtonsoft)或JsonSerializer.Serialize(new { name = Repo1 });(STJ)——我个人会走“使用序列化器库”的后一条路线。买了狗,别乱叫 -
我会考虑使用 json 库来确保其编码正确。
-
附带说明,不鼓励手动构建 json。它可能适用于简单的情况,但很快就会因为所有必需的转义而变得令人头疼。这也是一个潜在的错误来源,因为您注入的字符串不能包含任何 json 语言字符(如果包含,它将破坏您的 json 或更糟,成为攻击向量)。使用Json库读写json。
标签: c# asp.net json .net variables