我有以下代码:
search.UserToken = string.Format(@"{0};{1}", pi.Username, pi.Password)
JavaScriptSerializer jss = new JavaScriptSerializer();
string data = jss.Serialize(obj);
pi.Username
由域\用户名组成。然后,在将此对象通过Web请求发送到API之前,使用JavaScriptSerializer
对其进行序列化。
我遇到的问题是发送的值最终会在域和用户名之间产生四个反斜杠,就像创建字符串一样,初始化的单反斜杠被转义,然后在序列化过程中再次转义这些反斜杠。
如何防止这种情况发生,以免它被转义两次?
答案 0 :(得分:1)
我找到了解决问题的方法。您可以查看以下代码段:
[TestClass]
public class JavascriptSerializerTest
{
[TestMethod]
public void TestEscapeOnJavascriptSerializer()
{
const string replaceableToken = "[replace_here]";
var user = @"domain\user".Replace(@"\", replaceableToken);
const string password = "123456";
var token = new Token { Value = string.Format("{0};{1}", user, password) };
var serializer = new JavaScriptSerializer();
var jsonObject = serializer.Serialize(token);
jsonObject = jsonObject.Replace(replaceableToken, @"\");
Assert.AreEqual("{\"Value\":\"domain\\user;123456\"}", jsonObject);
}
}
public class Token
{
public string Value { get; set; }
}
<强>解释强>
JavaScriptSerializer类在内部调用方法 HttpUtility.JavaScriptStringEncode(input),通过调用此方法http://referencesource.microsoft.com/#System.Web/Util/HttpEncoder.cs,c0289ba7b2d459e5来添加额外的反斜杠。 另一个选择是替换 HttpEncoder ,但对我来说似乎太过分了: - )。