首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C# 中正確嵌入 JSON 字符串:轉義、逐字符號字面量與反序列化

     編輯:程式設計疑難解答

原始字符串問題

string param = "{ 
  \"params\": [ { \"username\":\"test\", ... } ], 
  \"jsonrpc\": \"2.0\" 
}";

雙引號嵌套導致編譯錯誤,且可讀性極差。

三種優雅解法

1. 逐字符號字面量 @\"...\" + 雙雙引號轉義

string param = @"
{
  ""params"": [
    {
      ""username"": ""test"",
      ""cmdid"": ""1002""
    }
  ],
  ""jsonrpc"": ""2.0""
}";
  • 優點:保留換行縮進,可讀性高。
  • 缺點:字符串內若包含 @ 仍需轉義。

2. C# 11+ 原始字符串字面量 \"\"\"...\"\"\"(推薦)

string param = """
{
  "params": [
    {
      "username": "test",
      "cmdid": "1002"
    }
  ],
  "jsonrpc": "2.0"
}
""";
  • 優點:無需任何轉義,完美保留格式,編譯器自動處理縮進對齊。
  • 要求:Visual Studio 2022 + .NET 7 / C# 11。

3. 強類型物件 + 序列化(工程最佳實踐)

public class RpcRequest {
    public List Params { get; set; }
    public string Jsonrpc { get; set; } = "2.0";
    public string Method { get; set; }
    public int Id { get; set; }
}
public class Param {
    public string Username { get; set; }
    public string Cmdid { get; set; }
    // ...
}

// 使用
var req = new RpcRequest {
    Params = new List { new Param { Username = "test", Cmdid = "1002" } },
    Method = "Verify",
    Id = 12
};
string json = JsonSerializer.Serialize(req); // System.Text.Json 或 Newtonsoft.Json
  • 優點:類型安全、IDE 提示、重構友好、避免手寫 JSON 錯誤。

解析端對應

var response = JsonSerializer.Deserialize(jsonString);

總結

臨時測試用 \"\"\",正式代碼請定義類並序列化。 手拼 JSON 字符串是技術債的源頭。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved