序列化动态对象时删除转义字符



这个问题可能是重复的,但我没有找到一个令人满意的答案,所以这就是我提出这个问题的原因。

我正在研究动态对象的序列化。当我序列化动态对象时,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"}

实际问题尚不清楚。你想要没有转义标记的字符串吗? 你想要不带引号的字符串吗?我将解决这两个问题。

没有转义
  1. 标记:虽然您声明它正在转义反斜杠,但它实际上是转义引号,因为打印到终端时"会导致"(我编辑了您的问题)。转义标记确保引号在文件、调试终端等中正确表示。您需要了解的是转义标记是否在目标目的地(字符串反序列化/解析的位置)消失。 我不明白为什么字符串。替换(...)不适合这个?请先解释一下,因为这是您现在的解决方案。
  2. 不带引号引号对于字符串类型的序列化内容是必需的。您可以尝试使用string.Replace(...)删除反斜杠,但这会删除转义功能,从而使最终应用程序无法识别字符串。将数据发送到目的地时,它还可能会引发错误。我强烈建议保留引号。

[更新后编辑] 如果您由于这些转义标记而遇到解析问题,那么您应该举一个发生这种情况的示例,因为问题出在那个地方而不是这里。如果没有问题发生,请关闭问题...

让你的 API 只返回对象(ExpandoObjectobject),或者让它返回一个ActionResult并执行return Json(d);

@dbc上面的评论中链接了一个完整的描述问题:https://stackoverflow.com/a/25559255/356218

最新更新