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

时间:2018-01-02 15:56:16

标签: c# json.net

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

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

之外,您能以其他方式建议我做其他事吗?

3 个答案:

答案 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)

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

  1. 没有逃脱标记: 虽然您声明它正在转义反斜杠,但它实际上是转义引号,因为\"在打印到终端时会导致"(我编辑了您的问题)。转义标记确保引号标记在文件,调试终端等中正确表示。您需要了解的是转义标记是否在目标目标(反序列化/解析字符串的位置)中消失。 我不明白为什么string.Replace(...)不适合这个?请先解释一下,因为现在是你的解决方案。
  2. 没有引号 字符串类型序列化内容需要引号。您可以尝试使用string.Replace(...)删除反斜杠,但这会删除转义功能,从而使得最终应用程序无法识别字符串。将数据发送到目的地时,它也可能会出错。我强烈建议保留报价。
  3. [更新后编辑] 如果您因为这些转义标记而遇到解析问题,那么您应该举例说明发生这种情况,因为问题出在那个地方而不是在这里。如果没有问题,请关闭问题......

答案 2 :(得分:1)

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

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