【问题标题】:How to remove escape characters from Json string?如何从 Json 字符串中删除转义字符?
【发布时间】:2015-01-13 21:23:27
【问题描述】:

我有一个 c# 方法,它调用另一个方法,该方法返回一个应该代表 JSON 的字符串。但是,字符串中包含转义字符:

public string GetPerson()
{
  string person = repo.GetPerson(); //person is  "{\"name\":jack,\"age\":\"54\"...
  return person;            
}

如果我尝试进行替换,则没有任何变化:

string person = repo.GetPerson().Replace(@"\""", ""); //person still has escape characters

当我在调试时尝试在文本查看器中查看人员时,转义字符不存在——Visual Studio 将它们撕掉。但是我调用此方法的 javascript 确实在 ajax 响应中看到了转义字符。

如果我尝试将 person 字符串反序列化到我的 C# User 对象中,它不会正确反序列化:

User user = JsonConvert.DeserializeObject<User>(person);

我有哪些选择?如何从人员字符串中去除转义字符,或将其正确反序列化为 User 对象?

【问题讨论】:

  • 你用什么来序列化和传递 JSON?

标签: javascript c# .net json


【解决方案1】:

如果 Console.WriteLine(person) 在字符串周围显示那些反斜杠和引号(不仅仅是字符串和内部引号),则存在双重序列化问题。您可以先尝试将其反序列化为字符串,然后再反序列化为类型,如下所示:

User user = JsonConvert.DeserializeObject<User>(JsonConvert.DeserializeObject<String>(person));

另外,你可以尝试这样做:

string person = repo.GetPerson().Replace(@"\""", @"""");

如果您可以控制 API,请在返回时检查双重序列化。 ASP 执行默认序列化,因此通常您不必返回带有预序列化对象的字符串。

对于 webapi,使用 Ok(object),对于 ASP MVC,使用 Json(object, requestBehaviour) 方法。

【讨论】:

  • 谢谢。这似乎是一个双重序列化的情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-07
  • 2021-02-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多