在Windows 10上反序列化JSON(无效的JSON基元)时出错,在服务器2012上没有

时间:2017-12-07 17:12:20

标签: c# json

我已经搜索了有关主题错误的所有现有问题/答案,但行为让我认为代码而不是机器上的错误。

我在Windows 10上有本地开发机器,反序列化工作完美。一旦我在Server 2012上发布它就会爆炸。 我使用3版本的代码试图强制解决,我可以得到不同的错误消息,但结果是相同的,在生产时尝试反序列化爆炸

我使用.NET framework 4和c#with NewtonJson来处理json调用。

如果有人在不同的部署中有奇怪的行为,我无法找到。

在代码段

下方
foreach(var s in ids) {
    i++;
    string _endpoint = sbc_url + s;

    Uri _uri = new Uri(_endpoint);
    WebClient wcClient = new WebClient();

    wcClient.BaseAddress = _endpoint;
    wcClient.Headers.Add("contentType: 'application/json; charset=utf-8'");
    wcClient.Headers.Add("dataType: 'json'");

    var response = wcClient.DownloadString(_endpoint);

    try {
        var jss = new JavaScriptSerializer();
        var dict = jss.Deserialize <Dictionary<string, dynamic>> (response); // BLOWS UP HERE
        ws_ret r = new ws_ret();
        foreach(var tt in dict["result"]) {
            r.result.Add(tt);
        }

        if (r.result != null)
            numeri.result.AddRange(r.result);
    } catch (Exception ex) {

    }
}

2 个答案:

答案 0 :(得分:0)

设置contentType: "application/json",请求正文将被视为JSON内容。这就是"Invalid JSON primitive"错误发生的原因,因为URL编码格式与JSON格式不同。

删除:

wcClient.Headers.Add("contentType: 'application/json; charset=utf-8'");

答案 1 :(得分:0)

我道歉但我已经解决了。系统管理员没有告诉我连接是在防火墙下,只是服务器机器超出了允许的地址。顺便说一句我确信这篇文章仍然有意义,因为我认为两个相同的配置没有办法有不同的行为,如果有人发生同样的问题需要坚持调查一切。 我怀疑返回的错误消息“无效的JSON原语”没有任何东西可以看到权限被拒绝。非常感谢大家