2017-06-16 218 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

相關問題