如何同时使用字符串插值和逐字字符串来创建 JSON 字符串文字?
How to use string interpolation and verbatim string together to create a JSON string literal?
我正在尝试创建一个表示 JSON 对象数组的字符串文字,所以我想到了使用字符串插值功能,如下面的代码所示:
public static void MyMethod(string abc, int pqr)
{
string p = $"[{{\"Key\":\"{abc}\",\"Value\": {pqr} }}]";
}
现在我想到了使用逐字字符串,这样我就不必使用反斜杠来转义双引号了。所以我通过this的回答知道逐字字符串和字符串插值可以一起使用。所以我改变了我的代码如下:
public static void MyMethod(string abc, int pqr)
{
string p = $@"[{{"Key":"{abc}","Value": {pqr} }}]";
}
但是编译失败。如果我的使用有任何问题,谁能帮助我,或者在这种情况下使用 C# 的字符串逐字功能 not 可以转义双引号吗?
您可以创建字典并将其序列化为 json,使用 Json.NET 执行此操作。
Dictionary<string, string> values = new Dictionary<string, string>();
values.Add("key1", "value1");
values.Add("key2", "value2");
string json = JsonConvert.SerializeObject(values);
// {
// "key1": "value1",
// "key2": "value2"
// }
你可以在这里看到更多细节:http://www.newtonsoft.com/json/help/html/SerializingCollections.htm
我同意其他人的观点,即从字符串构建它是个坏主意。
我还了解到您不想包含额外的依赖项。
这是我之前编写的一些代码,用于将字典转换为 JSON 字符串。它非常基本,只接受字符串类型,并且不会转义任何 names/values 中的引号,但这可以很容易地完成。
如果您尝试从基本类型序列化大型 JSON 字符串,这是我推荐的方法。它会帮助您保持理智。
private static string DictToJson(Dictionary<string, string> Dict)
{
var json = new StringBuilder();
foreach (var Key in Dict.Keys)
{
if (json.Length != 0)
json = json.Append(",\n");
json.AppendFormat("\"{0}\" : \"{1}\"", Key, Dict[Key]);
}
return "{" + json.ToString() + "}";
}
最好的方法是使用 JSON 序列化程序,因为它们具有与转义字符和其他内容相关的内置处理。参见 here。
但是,如果我们只想通过此路径手动创建JSON字符串,则可以通过将内部双引号更改为单引号来解决:
public static string MyMethod(string abc, int pqr)
{
string p = $@"[{{'Key':'{ abc}','Value': {pqr} }}]";
return p;
}
我正在尝试创建一个表示 JSON 对象数组的字符串文字,所以我想到了使用字符串插值功能,如下面的代码所示:
public static void MyMethod(string abc, int pqr)
{
string p = $"[{{\"Key\":\"{abc}\",\"Value\": {pqr} }}]";
}
现在我想到了使用逐字字符串,这样我就不必使用反斜杠来转义双引号了。所以我通过this的回答知道逐字字符串和字符串插值可以一起使用。所以我改变了我的代码如下:
public static void MyMethod(string abc, int pqr)
{
string p = $@"[{{"Key":"{abc}","Value": {pqr} }}]";
}
但是编译失败。如果我的使用有任何问题,谁能帮助我,或者在这种情况下使用 C# 的字符串逐字功能 not 可以转义双引号吗?
您可以创建字典并将其序列化为 json,使用 Json.NET 执行此操作。
Dictionary<string, string> values = new Dictionary<string, string>();
values.Add("key1", "value1");
values.Add("key2", "value2");
string json = JsonConvert.SerializeObject(values);
// {
// "key1": "value1",
// "key2": "value2"
// }
你可以在这里看到更多细节:http://www.newtonsoft.com/json/help/html/SerializingCollections.htm
我同意其他人的观点,即从字符串构建它是个坏主意。 我还了解到您不想包含额外的依赖项。
这是我之前编写的一些代码,用于将字典转换为 JSON 字符串。它非常基本,只接受字符串类型,并且不会转义任何 names/values 中的引号,但这可以很容易地完成。
如果您尝试从基本类型序列化大型 JSON 字符串,这是我推荐的方法。它会帮助您保持理智。
private static string DictToJson(Dictionary<string, string> Dict)
{
var json = new StringBuilder();
foreach (var Key in Dict.Keys)
{
if (json.Length != 0)
json = json.Append(",\n");
json.AppendFormat("\"{0}\" : \"{1}\"", Key, Dict[Key]);
}
return "{" + json.ToString() + "}";
}
最好的方法是使用 JSON 序列化程序,因为它们具有与转义字符和其他内容相关的内置处理。参见 here。
但是,如果我们只想通过此路径手动创建JSON字符串,则可以通过将内部双引号更改为单引号来解决:
public static string MyMethod(string abc, int pqr)
{
string p = $@"[{{'Key':'{ abc}','Value': {pqr} }}]";
return p;
}