0

使用下面的代码,我设法创建了一个具有以下格式的 jsonArray:[{"id":3},{"id":4},{"id":5}]

var jArray = new JsonArray();
        int numOfChildren = 10;
        for (int i = 0; i < numOfChildren; i++)
        {
            if (CONDITION == true)
            {
                var jObj = new JsonObject();
                int id = SOMEID;
                jObj.SetNamedValue("id", JsonValue.CreateNumberValue(id));
                jArray.Add(jObj);
            }

我现在正在尝试使用 PostAsync 将“JsonArray”发送到服务器,如下所示:

Uri posturi = new Uri("http://MYURI");
HttpContent content = new StringContent(jArray.ToString(), Encoding.UTF8, "application/json");
System.Net.Http.HttpResponseMessage response = await client.PostAsync(postUri, content);

不过,在服务器端,我可以看到发布请求不包含任何内容。在互联网上挖掘之后,似乎在 StringContent 中使用 jArray.ToString() 是罪魁祸首,但我不明白为什么或者这是否是问题所在。那么,为什么我的内容不见了?请注意,我正在为不使用 JSON.net 的 UWP 应用程序编写此内容。

4

2 回答 2

0

经过大量挖掘,我最终 Wireshark 制作了两个不同的应用程序,一个使用我原来的 jArray.ToString(),另一个使用 JSON.net 的 JsonConver.SerializeObject()。在 Wireshark 中,我可以看到两个数据包的内容是相同的,这告诉我我的问题出在服务器端。我最终发现我处理传入 POST 请求的 PHP 脚本过于文字化,并且只接受“application/json”类型的 json 帖子。我的 UWP 应用程序发送了“application/json;”类型的数据包;字符集=utf-8'。在稍微放松了我在服务器端的一些内容检查之后,一切都很好。

对于那些希望在不使用 JSON.net 的情况下序列化 json 的人来说,jsonArray.ToString() 或 jsonArray.Stringify() 都可以很好地工作。

于 2017-10-03T02:34:25.027 回答
-1

您应该使用序列化器将其转换为字符串。使用 NewtonSoft JSON Nuget。

string str = JsonConvert.SerializeObject(jArray);
HttpContent content = new StringContent(str, Encoding.UTF8, "application/json");
System.Net.Http.HttpResponseMessage response = await client.PostAsync(postUri, content);
于 2017-10-01T18:17:08.190 回答