这个问题可能是重复的,但我没有找到一个令人满意的答案,所以这就是我提出这个问题的原因。
我正在研究动态对象的序列化。当我序列化动态对象时,API 返回的响应为
"{"firstname":"prasanthi","lastname":"kota"}"
我不想使用字符串。替换或正则表达式模式。还有其他方法可以做到这一点吗?
我尝试过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);
这是显示
"{rn "firstname": "prasanthi",rn "lastname": "kota"rn}"
我不认为这是我问题的答案。 你能建议我用字符串以外的任何其他方式做吗.replace
这里没有问题。该仅作为调试辅助工具出现在 IDE 中 - 以与在 C# 中编写字符串相同的方式直观地表示字符串。它实际上不包含转义字符。如果您使用:
Console.Write(serialized_info);
或:
File.WriteAllText(path, serialized_info);
然后你会看到正常的正确JSON。C# 字符串文本:
"{"firstname":"prasanthi","lastname":"kota"}"
正是包含内容的字符串:
{"firstname":"prasanthi","lastname":"kota"}
实际问题尚不清楚。你想要没有转义标记的字符串吗? 你想要不带引号的字符串吗?我将解决这两个问题。
没有转义- 标记:虽然您声明它正在转义反斜杠,但它实际上是转义引号,因为打印到终端时
"
会导致"
(我编辑了您的问题)。转义标记确保引号在文件、调试终端等中正确表示。您需要了解的是转义标记是否在目标目的地(字符串反序列化/解析的位置)消失。 我不明白为什么字符串。替换(...)不适合这个?请先解释一下,因为这是您现在的解决方案。 - 不带引号引号对于字符串类型的序列化内容是必需的。您可以尝试使用
string.Replace(...)
删除反斜杠,但这会删除转义功能,从而使最终应用程序无法识别字符串。将数据发送到目的地时,它还可能会引发错误。我强烈建议保留引号。
[更新后编辑] 如果您由于这些转义标记而遇到解析问题,那么您应该举一个发生这种情况的示例,因为问题出在那个地方而不是这里。如果没有问题发生,请关闭问题...
让你的 API 只返回对象(ExpandoObject
或object
),或者让它返回一个ActionResult
并执行return Json(d);
@dbc上面的评论中链接了一个完整的描述问题:https://stackoverflow.com/a/25559255/356218