如何从 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) 方法。
我有一个 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) 方法。