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

问题描述 投票:0回答:2

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

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

我使用.NET framework 4和c#与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) {

    }
}
c# json
2个回答
0
投票

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

去掉:

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

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.