我有一个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);
我有什么选择?如何从person字符串中去除转义字符,或者将其正确地反序列化为User对象?
答案 0 :(得分:3)
如果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)方法。