2017-06-16 145 views
2

我试图创建一个字符串字面值来表示一个JSON对象数组,所以我想使用字符串插值功能,如下面的代码所示:如何使用字符串插值和逐字字符串一起创建一个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 = [email protected]"[{{"Key":"{abc}","Value": {pqr} }}]"; 
} 

但它无法编译。任何人都可以帮助我,如果我的用法中有任何错误,或者而不是可以在这种情况下使用C#字符串逐字符特征来避免双引号?

+2

逐字字符串需要你通过加倍双引号来避免双引号。 '$ @“[{{”“Key”“:”“{abc}”“,”“Value”“:{pqr}}}]”'可以工作,但是这样可读性更高。考虑使用JSON序列化程序来避免字符串湿法工作。 –

+0

@RBT甚至假设你真的不想使用JSON序列化程序我会避免以这种方式构建字符串,格式化字符串很快变得绝对不可读并且容易出错。在这种情况下''String.Format()'会有所帮助,如果你写了更多的函数,那么你将有一个很好的可读代码片段('QuoteJsonString()','ConvertToJsonKeyValuePair()'和一行LINQ来连接它们。 ..) –

回答

4

最好的方法是使用JSON 串行,因为他们有内置处理有关转义字符和其他的东西。见here

但是,如果我们想通过这条道路只有手动创建的JSON字符串,那么它是可以解决的,通过改变内双引号单引号如下:

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

你可以创建字典并使用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

+0

我打算在一个方法中利用这段代码,该方法从installshield的自定义操作中调用。在我的C#项目中添加对JSON.NET dll的依赖将会邀请在installshield项目中添加对此dll的依赖关系。这是一个明确的工作,只是为了修复C#端的这一行代码(如果它完全可以修复的话),这是相当多的开销。 – RBT

1

我与大家一样,从字符串构建它是一个坏主意同意。 我也明白你不想包含额外的依赖。

以下是我之前编写的将字典转换为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() + "}"; 
} 
+0

在我的JSON数据中,我也可以有int,日期值。您将每个值都视为字符串。 – RBT

相关问题