如何从 Json 字符串中删除转义字符?

How to remove escape characters from Json string?

我有一个 c# 方法调用另一个方法,该方法 returns 返回一个应该表示 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

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

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

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

我有哪些选择?我怎样才能从 person 字符串中删除转义字符,或者将其正确反序列化为 User 对象?

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

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

此外,您可以尝试这样做:

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

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

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