将字符串添加到verbatim字符串字面量

3

我正试图构建一个原始的json字符串,像下面这样发送它在http请求中:

var requestContent = @"{
                    ""name"": ""somename"",
                    ""address"": ""someaddress""
}";

我希望不再使用硬编码的姓名和地址,而是从以下变量中获取它们的值。

string name = "someName";
string address = "someAddress";

但以下代码无法运行。有什么想法吗?
var requestContent = @"{
                        ""name"": \" + name \",
                        ""address"": \" + address \"
    }";

为什么不使用JSON序列化器? - Scott
3个回答

10

正确的语法是:

var requestContent = @"{
    ""name"": """ + name + @""",
    ""address"": """ + address + @"""
}";

或者,您可以使用 string.Format

var requestContent = string.Format(@"{
    ""name"": ""{0}"",
    ""address"": ""{1}""
}", name, address);

或者你可以使用一个真正的JSON序列化器。


我永远也想不到那个。谢谢。 - mack
我花了***天的时间寻找这个答案,非常感谢 :) - OJB1

5
您可以使用带插值的verbatim字符串:
var requestContent = $@"{{
    ""name"": ""{name}"",
    ""address"": ""{address}""
}}";

编辑:要使此方法生效,请确保您需要输出的大括号是双倍的(就像引号一样)。另外,先是$,然后是@


2

相反,请使用Newtonsoft.JSON JObject(),如下:

dynamic myType = new JObject();
myType.name = "Elbow Grease";
myType.address = "someaddress";

Console.WriteLine(myType.ToString());

将生成以下JSON字符串

 {
  "name": "Elbow Grease",
  "address": "someaddress"
 }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接