这个问题可能重复,但我没有找到满意的答案,这就是我提出这个问题的原因。
我正在研究动态对象的序列化。当我序列化动态对象时,API将响应返回为
"{\"firstname\":\"prasanthi\",\"lastname\":\"kota\"}"
我不想使用 string.Replace 或 RegexPattern 。有没有其他方法可以做到这一点?
我尝试了 JavaScriptSerializer ,但它在引号中添加了转义标记(\"
)。
这是我的代码:
dynamic d = new ExpandoObject();
d.firstname = "prasanthi";
d.lastname = "kota";
string serialized_info = JsonConvert.SerializeObject(d);
更新
我在我的代码的另一部分使用 serialized_info 。我不想在那里使用斜杠。所以,我想删除之前的斜杠。
我已经厌倦了评论中提到的
dynamic x = new { firstname = "prasanthi", lastname = "kota" }; var serialized_info = JsonConvert.SerializeObject(x,Formatting.Indented);
这是显示
"{\r\n \"firstname\": \"prasanthi\",\r\n \"lastname\": \"kota\"\r\n}"
我不认为这是我的问题的答案。 除了 string.replace
之外,您能以其他方式建议我做其他事吗?答案 0 :(得分:4)
这里没有问题。 \
仅作为调试辅助工具出现在IDE中 - 在视觉上表示字符串的方式与在C#中编写的方式相同。它实际上 包含转义字符。如果您使用:
Console.Write(serialized_info);
或:
File.WriteAllText(path, serialized_info);
然后你会看到正常的正确JSON。 C#字符串文字:
"{\"firstname\":\"prasanthi\",\"lastname\":\"kota\"}"
正是包含内容的字符串:
{"firstname":"prasanthi","lastname":"kota"}
答案 1 :(得分:2)
实际问题尚不清楚。你想要没有逃脱标记的字符串? 你想要没有引号的字符串吗?我将解决这两个问题。
\"
在打印到终端时会导致"
(我编辑了您的问题)。转义标记确保引号标记在文件,调试终端等中正确表示。您需要了解的是转义标记是否在目标目标(反序列化/解析字符串的位置)中消失。
我不明白为什么string.Replace(...)不适合这个?请先解释一下,因为现在是你的解决方案。string.Replace(...)
删除反斜杠,但这会删除转义功能,从而使得最终应用程序无法识别字符串。将数据发送到目的地时,它也可能会出错。我强烈建议保留报价。[更新后编辑] 如果您因为这些转义标记而遇到解析问题,那么您应该举例说明发生这种情况,因为问题出在那个地方而不是在这里。如果没有问题,请关闭问题......
答案 2 :(得分:1)
让您的API返回对象(ExpandoObject
或object
),或者让它返回ActionResult
并执行return Json(d);
@dbc在上面的评论中链接了一个完整的描述问题:https://stackoverflow.com/a/25559255/356218