随着.NET 7与C#11的发布,微软发布了C# 11 中的原始字符串这个新特性。 这个新特性解决了祖传字符串中引号的问题。
微软官方的表述是:" Raw string literals",圈里都叫他”原始字符串”。从字面不难看出,它是适用于字符串的新特性,解决字符串中特殊字符的新语法。
原始字符串可以包含任意文本,包括空格、新行、嵌入的引号及其他特殊字符。
原始字符串至少以三个双引号"""字符开头,以相同数量的双引号字符结束。通常,原始字符串文字在一行使用三个双引号开始字符串,在另一行使用三个双引号结束字符串。
说了这么多,来看一个实际案例,假如有这么一个JSON字符串
{
"id": 74,
"coverImage": "/static/points/meituan.png",
"name": "30天骑行卡",
"price": "25",
"point": 2500,
"companyName": "公司",
"description": "共享单车30天畅骑卡",
"expired": "2022年12月31日 23:59:59",
"attention": "所有解释权归公司所有"
}var JsonStr = "{\"id\": 74,\"coverImage\": \"/static/points/meituan.png\",\"name\": \"30天骑行卡\",\"price\": \"25\",\"point\": 2500,\"companyName\": \"公司\",\"description\": \"共享单车30天畅骑卡\",\"expired\": \"2022年12月31日 23:59:59\",\"attention\": \"所有解释权归公司所有\"}";
Console.WriteLine(JsonStr);写成一行的话,代码的可读性太差了。为了让代码更有可读性,可以用原义标识符@定义字符串,这时大部分字符不需要转义,但是双引号要转义成"":
var JsonStr = @"{
""id"": 74,
""coverImage"": ""/static/points/meituan.png"",
""name"": ""30天骑行卡"",
""price"": ""25"",
""point"": 2500,
""companyName"": ""公司"",
""description"": ""共享单车30天畅骑卡"",
""expired"": ""2022年12月31日 23:59:59"",
""attention "": ""所有解释权归所有""
}";
Console.WriteLine(JsonStr);这样使用起来没什么问题,但如果查看输出结果是这样的

int point = 2500;
var JsonStr = @$"
{{
""id"": 74,
""coverImage"": ""/static/points/meituan.png"",
""name"": ""30天骑行卡"",
""price"": ""25"",
""point"": {point},
""companyName"": ""公司"",
""description"": ""共享单车30天畅骑卡"",
""expired"": ""2022年12月31日 23:59:59"",
""attention "": ""所有解释权归公司所有""
}}";
Console.WriteLine(JsonStr);var JsonStr = """{"id":74,"coverImage":"/static/points/meituan.png","name":"30天骑行卡","price":"25","point":2500,"companyName":"公司","description":"共享单车30天畅骑卡","expired":"2022年12月31日 23:59:59","attention":"所有解释权归公司所有"}""";
Console.WriteLine(JsonStr);非常的Nice,多行的写法:
var JsonStr =
"""
{
"id": 74,
"coverImage": "/static/points/meituan.png",
"name": "30天骑行卡",
"price": "25",
"point": 2500,
"companyName": "公司",
"description": "共享单车30天畅骑卡",
"expired": "2022年12月31日 23:59:59",
"attention": "所有解释权归公司所有"
}
""";
Console.WriteLine(JsonStr);
这里的独占一行,意思是开头,内容,结尾必须分开。
可以是这样的:
var JsonStr =""" ... """
也可以是这样的
var JsonStr = """ ... """
还有一个错误是这样的

Console.WriteLine(""" ""30天骑行卡"" """);当需要使用差值字符串的时候,"""前面加$$就可以了。在JSON内部,差值表达式也需要使用{{}}括起来。代码长这个样子:
int point = 2500;
var JsonStr =
$$"""
{
"id": 74,
"coverImage": "/static/points/meituan.png",
"name": "30天骑行卡",
"price": "25",
"point": {{point}},
"companyName": "公司",
"description": "共享单车30天畅骑卡",
"expired": "2022年12月31日 23:59:59",
"attention": "所有解释权归公司所有"
}
""";
Console.WriteLine(JsonStr);