Как использовать строковую интерполяцию и дословную строку для создания строкового литерала 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#?

3 ответа

Решение

Лучший способ - использовать сериализаторы JSON, поскольку они имеют встроенную обработку, связанную с escape-символами и другими вещами. Смотрите здесь.

Однако если мы хотим пройти по этому пути только для создания строки 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 с помощью 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

Другие вопросы по тегам