我在使用来自我的.Net WPF应用程序(.Net 4.5)的安静服务时遇到了一些麻烦,特别是在发送带有一些json数据的“PUT”请求时。
仅供参考:宁静的服务在Python Flask下运行。
我使用以下方法向restful服务发送请求的方法:
HttpClient http = new HttpClient();
http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", encodedCredentials);
http.Timeout = TimeSpan.FromSeconds(1);
// Add an Accept header for JSON format.
http.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpContent content = new StringContent(jDataString, Encoding.UTF8, "application/json");
当我提交通常的字符串时,一切正常。但是一旦字符串包含换行符,我就遇到了麻烦。
使用:
mytring.Replace("\r", "").Replace("\n", "")
工作,我的字符串然后被宁静的服务接受。
不幸的是,这是不可接受的,因为我希望能够检索换行符。
我因此尝试了类似的方法:
mytring.Replace("\n", "\\n").Replace("\r", "\\r")
或者甚至使用内部字符以确保我识别出模式:
mytring.Replace("\n", "\\+n").Replace("\r", "\\+r")
在这两种情况下,我的解析字符串看起来很好,但是宁静的服务不接受。
以下两个例子 - 第一个版本被接受,而不是第二个和第三个......
"XML_FIELD": "<IDs><Id Type=\"System.Int32\" Value=\"7\" /></IDs>"
"XML_FIELD": "<IDs>\r\n<Id Type=\"System.Int32\" Value=\"20\" />\r\n</IDs>"
"XML_FIELD": "<IDs>\+r\+n<Id Type=\"System.Int32\" Value=\"20\" />\+r\+n</IDs>"
预先感谢您的帮助!! 此致!
答案 0 :(得分:0)
好的,明白了......
问题来自“\ r \ n”字符,它直接来自我的数据库......
无论如何,改为执行是针对SERIALIZATION的
mySerializedString.Replace("\r\n", "\n")
.Replace("\n", "\\n")
.Replace("\r", "\\r")
.Replace("\'", "\\'")
.Replace("\"", "\\\"")
.Replace("\t", "\\t")
.Replace("\b", "\\b")
.Replace("\f", "\\f");
反序列化反向:
myDeSerializedString.Replace("\\n", "\n")
.Replace("\\r", "\r")
.Replace("\\'", "\'")
.Replace("\\\"", "\"")
.Replace("\\t", "\t")
.Replace("\\b", "\b")
.Replace("\\f", "\f");
注意:在此过程中,我们会松开“\ r \ n”个字符(由“\ n”替换)。