【问题标题】:Variable in a C# StringC# 字符串中的变量
【发布时间】: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


【解决方案1】:

试试这个

var json = System.Text.Json.JsonSerializer.Serialize(new {name=Repo1});
//or
var json = System.Text.Json.JsonSerializer.SerializeToElement(new {name=Repo1}).ToString();
//or 
var json="{\"name\":\""+ Repo1+"\"}";

var content = new StringContent(json, Encoding.UTF8, "application/json");

【讨论】:

  • 对于单个值,使用 JsonElementJsonNode(它们大致相当于 System.Text.Json 中的 JToken)而不是传递 C# 匿名类型可能更有效。跨度>
  • @Dai 谢谢。也许你是对的。我也可以手动创建一个字符串。但我看不出一行代码有什么不同。
猜你喜欢
  • 2012-07-11
  • 2020-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-14
  • 1970-01-01
相关资源
最近更新 更多