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