小智 23
我发现从JSON字符串中删除所有转义字符的最简单和最好的方法是将字符串传递给Regex.Unescape()方法.此方法返回一个没有ecapes的新字符串,即使\n\t等也被删除.
有关更多详细信息,请参阅此MSDN文章: Regex.Unescape方法(字符串)(System.Text.RegularExpressions)
Joh*_*ate 12
这种类型的转义字符串通常在您尝试第二次将 JSON 字符串编码为 JSON 时生成。这会导致类似“不同级别的序列化”
解决方案:
代码:
// Initial example json string: "\"{\\\"Property1\\\":1988,\\\"Property2\\\":\\\"Some data :D\\\"}\""
// First, deserialize to another string (unescaped string).
string unescapedJsonString = JsonConvert.DeserializeObject<string>(escapedJsonString);
// Result: "{\"Property1\":1988,\"Property2\":\"Some data :D\"}"
// Second, deserialize to another string, again (in this case is necessary)
var finalUnescapedJsonString = JsonConvert.DeserializeObject<string>(unescapedJsonString);
// {"Property1":1988,"Property2":"Some data :D"} This time prints a final, unescaped, json string:
// Finally, perform final deserialization to the target type, using the last unescaped string.
MyClass targetObject = JsonConvert.DeserializeObject<MyClass>(finalUnescapedJsonString);
Run Code Online (Sandbox Code Playgroud)
如果json对象是一个字符串,则在.Net中添加转义“ \”字符,如果您想清理json字符串JObject.Parse({string}),如下面的代码片段所示,则可以很好地清理:
var myJsonAsString = "{\"Name\": \"John\", \"LastName\": \"Doe\", \"Age\": 199 }";
var myCleanJsonObject = JObject.Parse(myJsonAsString);
Run Code Online (Sandbox Code Playgroud)
应该给我们一个干净的Json对象,并删除转义字符。
{
"Name": "John",
"LastName": "Doe",
"Age": 199
}
Run Code Online (Sandbox Code Playgroud)
Regex.Unescape()该方法在大多数情况下都可以正常工作,但是某些特定情况下需要自定义替换。例如,Regex.Unescape()将生成JSON不支持的实际换行符。
未转义的JSON:
{"comments_count":27,"comments":"<a name=\"comments\"><\/a>\n\n\t\n\t\n\t\t\n\t<div class=\"CommentsList\">\n\t\t<strong>COMENTARII<\/strong>\n\t\t"}
Run Code Online (Sandbox Code Playgroud)
正则表达式
{"comments_count":27,"comments":"<a name="comments"></a>
Replacements
<div class="CommentsList">
<strong>Comments</strong>
"}
Run Code Online (Sandbox Code Playgroud)
自定义替换
private string SanitizeReceivedJson(string uglyJson)
{
var sb = new StringBuilder(uglyJson);
sb.Replace("\\\t", "\t");
sb.Replace("\\\n", "\n");
sb.Replace("\\\r", "\r");
return sb.ToString();
}
{"comments_count":27,"comments":"<a name=\"comments\"><\/a>\n\n\t\n\t\n\t\t\n\t<div class=\"CommentsList\">\n\t\t<strong>COMENTARII<\/strong>"}
Run Code Online (Sandbox Code Playgroud)
小智 0
C# 字符串赋值可以为您完成此操作,但如果名称或值包含 \,则会进行双重转义。正确的方法是使用variable.Replace("\\\\","\\"); 或变量.Replace(@"\\",@"\"); 这将删除双转义 \ 字符,保留 REQUIRED \ 值。例如,如果 JSON 包含“Domain\Username”,则这将返回为 \“Domain\\\\Username\”,将其分配给字符串将导致您将拥有 Domain\\Username
| 归档时间: |
|
| 查看次数: |
60213 次 |
| 最近记录: |