我使用.net 3.5编写一个简单的REST Web服务。这将使用JSON将数据传入和传出数据。我有一个简单的测试HTML页面,用于将POST数据发送到服务。当我收到数据时,它全部被编码。很公平,所以我应该能够简单地解码它。这就是我遇到问题的地方。我搜索过Stackoverflow但找不到任何解决方案。
这是我用来生成测试的测试HTML。我认为这是正确的。
<input type="text/json" id="contact" name="contact" value='{"FirstName":"John","LastName":"Doe","Organisation":"","AddressID":null,"Status":0,"Credits":1,"Type":1,"ExpiryDate":null,"UserName":"","Password":"","CustomerIconURL":"","CountryCode":"UK","LastUpdated":null,"DateCreated":"2013-03-29T17:25:41.667"}' readonly="readonly" />
<input type="submit" value="send POST" />
我正在使用以下代码段接收请求中的数据..
Stream stream = context.Request.InputStream;
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
string JsonBody = Encoding.UTF8.GetString(bytes);
..这会返回以下字符串
@"contact=%7B%22FirstName%22%3A%22John%22%2C%22LastName%22%3A%22Doe%22%2C%22Organisation%22%3A%22%22%2C%22AddressID%22%3Anull%2C%22Status%22%3A0%2C%22Credits%22%3A1%2C%22Type%22%3A1%2C%22ExpiryDate%22%3Anull%2C%22UserName%22%3A%22%22%2C%22Password%22%3A%22%22%2C%22CustomerIconURL%22%3A%22%22%2C%22CountryCode%22%3A%22UK%22%2C%22LastUpdated%22%3Anull%2C%22DateCreated%22%3A%222013-03-29T17%3A25%3A41.667%22%7D";
..所以我认为解码(解码?)这个字符串是相对的,但不能完全得到它...我最近管理的是使用以下内容..
string JsonBody = Uri.UnescapeDataString(JsonBody);
但这会让我回复以下......
"@contact={\"FirstName\":\"John\",\"LastName\":\"Doe\",\"Organisation\":\"\",\"AddressID\":null,\"Status\":0,\"Credits\":1,\"Type\":1,\"ExpiryDate\":null,\"UserName\":\"\",\"Password\":\"\",\"CustomerIconURL\":\"\",\"CountryCode\":\"UK\",\"LastUpdated\":null,\"DateCreated\":\"2013-03-29T17:25:41.667\"}"
我无法找到将\"
移至"
的方法。我意识到这表示"
仍在转义,但即使使用
JsonBody = JsonBody.Replace(@"\", "");
..我应该工作,但没有。
所以,如果有人有一个巧妙的解决方法,我会很感激。也许我从HTML中以不正确的形式发送字符串? Web服务的客户端将使用各种平台编写,Drupal为一个。所以我想我会用一个简单的HTML测试页来开始生成测试uri ..
非常感谢您的任何想法。
Richard H