Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Json字符串中转义Json字符串_C#_.net_Json - Fatal编程技术网

C# 如何在Json字符串中转义Json字符串

C# 如何在Json字符串中转义Json字符串,c#,.net,json,C#,.net,Json,我有一个windows服务,它从数据库加载参数。有一个参数是一个Json字符串,它的字段是另一个Json字符串 { "dll_fullname": "ScheduledTask.DialogTechSync.DialogTechSyncTask", "dll_para_json": "{"data_length": "5000", "max_parallelism": "4", "pause_time": "20"}" } 在上面的示例中,dll_para_json就是这个j

我有一个windows服务,它从数据库加载参数。有一个参数是一个Json字符串,它的字段是另一个Json字符串

{ 
    "dll_fullname": "ScheduledTask.DialogTechSync.DialogTechSyncTask",
    "dll_para_json": "{"data_length": "5000", "max_parallelism": "4", "pause_time": "20"}"
}
在上面的示例中,dll_para_json就是这个json字符串中的json字符串

{ 
    "dll_fullname": "ScheduledTask.DialogTechSync.DialogTechSyncTask",
    "dll_para_json": "{"data_length": "5000", "max_parallelism": "4", "pause_time": "20"}"
}
在C#代码中,如果我按以下方式硬编码,它可以正常工作:

{ \"dll_fullname\": \"ScheduledTask.DialogTechSync.DialogTechSyncTask\",\"dll_para_json\": \"{\"data_length\": \"5000\", \"max_parallelism\": \"4\", \"pause_time\": \"20\"}\" }
但是,如果我将其放入数据库中,当我反序列化它时,它会出现异常:

dynamic results = JsonConvert.DeserializeObject<dynamic>(json);
没有一个奏效。总是相同的例外:

Error in parsing job: Newtonsoft.Json.JsonReaderException: After parsing a value an unexpected character was encountered: d. Path 'dll_para_json', line 1, position **.
at Newtonsoft.Json.JsonTextReader.ParsePostValue(Boolean ignoreComments)
at Newtonsoft.Json.JsonTextReader.Read()
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateJObject(JsonReader reader)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
有人知道怎么解决这个问题吗


非常感谢

很明显,您试图反序列化的json字符串(如果我理解正确的话,它来自数据库)格式错误/非法,正如异常告诉您的那样。现在,如果您对
json
变量中的字符串有问题,您应该仔细查看它,查看其中的每个字符。我所能说的是,它显然不像您尝试的硬编码字符串(对于json语法中的转义或非转义字符)。你会问,到底有什么区别?我怎么知道呢,我不知道
json
变量到底包含什么;)首先为什么要逃避它?也许您可以使用复合json结构“dll_para_json”:{“someKey”:“SomeValue”}如果您的json格式不正确,json.NET将无法读取它。当JSON作为嵌套字符串文本嵌入JSON中时,应正确转义,例如,如或所示。您需要修复创建输入JSON的序列化程序。在最初生成JSON时,您可以正确地转义
“dll\u para\u JSON”
的值,或者将其作为嵌入式JSON而不是字符串写入。如果您使用Json.NET编写Json,请参阅。很明显,您尝试反序列化的Json字符串(如果我理解正确,它来自数据库)格式错误/非法,正如异常所告诉您的那样。现在,如果您对
json
变量中的字符串有问题,您应该仔细查看它,查看其中的每个字符。我所能说的是,它显然不像您尝试的硬编码字符串(对于json语法中的转义或非转义字符)。你会问,到底有什么区别?我怎么知道呢,我不知道
json
变量到底包含什么;)首先为什么要逃避它?也许您可以使用复合json结构“dll_para_json”:{“someKey”:“SomeValue”}如果您的json格式不正确,json.NET将无法读取它。当JSON作为嵌套字符串文本嵌入JSON中时,应正确转义,例如,如或所示。您需要修复创建输入JSON的序列化程序。在最初生成JSON时,您可以正确地转义
“dll\u para\u JSON”
的值,或者将其作为嵌入式JSON而不是字符串写入。如果您使用Json.NET编写Json,请参阅。