将硬编码的JSON字符串存储到变量

时间:2014-04-10 20:18:11

标签: c# json

我在将此json字符串存储到变量时遇到问题。这是我在这里失踪的愚蠢行为

private string someJson = @"{
    "ErrorMessage": "",
    "ErrorDetails": {
        "ErrorID": 111,
        "Description": {
            "Short": 0,
            "Verbose": 20
        },
        "ErrorDate": ""
    }
}";

4 个答案:

答案 0 :(得分:38)

如果使用@符号,它必须转义“s”,它不允许\在第一个之后用作转义符号。所以这两个选项是:

不要使用@并使用\来逃避“

string someJson = "{\"ErrorMessage\": \"\",\"ErrorDetails\": {\"ErrorID\": 111,\"Description\":{\"Short\": 0,\"Verbose\": 20},\"ErrorDate\": \"\"}}";

或使用双引号

string someJson =@"{""ErrorMessage"": """",""ErrorDetails"": {""ErrorID"": 111,""Description"": {""Short"": 0,""Verbose"": 20},""ErrorDate"": """"}}";

答案 1 :(得分:9)

首先,我会把它扔出去:因为这个原因,我想在JSON blob中使用单引号。

但是,很大程度上取决于你将如何声明你的string变量。

string jsonBlob = @"{ 'Foo': 'Bar' }";
string otherBlob = @"{ ""Foo"": ""Bar"" };

...这是一个ASCII编码的字符串,它应该与单引号很好地配合。您可以使用双重双引号转义序列来转义双精度数,但单引号设置更清晰。请注意,“在这种情况下不起作用。

string jsonBlob = "{ 'Foo': 'Bar' }";
string otherBlob = "{ \"Foo\": \"Bar\" };

...此声明使用C#的默认字符串编码Unicode。请注意,您必须使用带双引号的斜杠转义序列 - 双精度不起作用 - 但单曲不受影响。

由此可以看出,单引号JSON文字不受正在使用的C#字符串编码的影响。这就是为什么我说单引号在硬编码的JSON blob中使用比使用双精度更好 - 它们的工作量更少,更易读。

答案 2 :(得分:3)

在字符串中用c#内联编写JSON有点笨重,因为JSON标准需要双引号,需要在c#中转义,如其他答案所示。一个优雅的解决方法是使用来自JSON.Net的c#dynamic和JObject。

DataStream

请参阅https://www.newtonsoft.com/json/help/html/CreateJsonDynamic.htm

答案 3 :(得分:0)

简单方法是将JSON复制到.json文件并通过代码读取该文件

string jsonData = string.Empty;
jsonData = File.ReadAllText(@"\UISettings.json");