如何结合使用字符串内插和逐字字符串来创建 JSON 字符串文本



我正在尝试创建一个表示 JSON 对象数组的字符串文字,因此我想使用字符串插值功能,如下面的代码所示:

    public static void MyMethod(string abc, int pqr)
    {
        string p = $"[{{"Key":"{abc}","Value": {pqr}  }}]";
    }

现在我想使用逐字字符串,这样我就不必使用反斜杠转义双引号。所以我通过这个答案知道逐字字符串和字符串插值可以一起使用。所以我更改了我的代码,如下所示:

public static void MyMethod(string abc, int pqr)
{
    string p = $@"[{{"Key":"{abc}","Value": {pqr} }}]";
}

但它无法编译。如果我的使用有任何错误,或者在这种情况下使用 C# 的字符串逐字功能无法转义双引号,任何人都可以帮助我?

最好的方法是使用 JSON 序列化程序,因为它们具有与转义字符和其他内容相关的内置处理。看这里。

但是,如果我们只想通过此路径手动创建 JSON 字符串,则可以通过将内部双引号更改为单引号来解决:

public static string MyMethod(string abc, int pqr)
{
   string p = $@"[{{'Key':'{ abc}','Value': {pqr} }}]";
   return p;
}

我同意其他人的观点,即从字符串构建它是一个坏主意。我也理解您不想包含额外的依赖项。

这是我之前编写的一些代码,用于将字典转换为 JSON 字符串。它非常基本,只接受字符串类型,并且不会转义任何名称/值中的引号,但这可以很容易地完成。

如果您尝试从基本类型序列化大型 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.NET 创建字典并将其序列化为json。

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

相关内容

  • 没有找到相关文章

最新更新