【问题标题】:JSON error : expecting state 'element'.. encountered 'text' with name '', namespace ''JSON错误:期待状态'元素'..遇到名称为'',命名空间''的'文本'
【发布时间】:2015-09-09 08:53:54
【问题描述】:

我正在尝试将 Json 数据从 Ajax 请求发送到一个安静的 Web 服务。 这不是我第一次这样做,但这次类型更复杂。

这是网络服务方法:

InstanceServiceResponse<BlogPostData> CreatePost(ObjectCollection ressources);

对象ObjectCollection定义如下:

public class ObjectCollection : ISerializable, IEnumerable
    {
        Dictionary<string, object> objectsValue;

        public ObjectCollection()
        {
            objectsValue = new Dictionary<string, object>();
        }

        public ObjectCollection(IDictionary<string, object> parameters)
        {
            objectsValue = new Dictionary<string, object>(parameters);
        }

        ...
        ...
   }

ressources 参数是这样创建的:

function GetRessources() {
    var Ressources = [];
    $.each($("#ressources-holder > div"), function (key, value) {
        Ressources.push( { "name": $(value).children().first().text().slice(0, -1), "id": $(value).attr('id') } );
    });
    return Ressources;
}

而创建的 Json 是:

[{"name":"tototititata","id":"107875"},{"name":"test","id":"107877"}]

关于错误以及我在其他 SO 帖子中看到的与同一问题相关的内容,这似乎是因为参数的名称。

但是,这就是我发布新问题的原因,我的类型 (ObjectCollection) 没有任何公共字段,我可以“绑定”我的参数。

我现在有点不知所措,我们将非常感谢任何帮助和建议。

编辑

由于我没有找到任何适用的解决方案,因此我使用了旁路。 我像这样发送Dictionary&lt;string, object&gt;

function GetRessources() {
    var Ressources = [];
    $.each($("#ressources-holder > div"), function (key, value) {
        Ressources.push({ "Key": $(value).children().first().text().slice(0, -1), "Value": $(value).attr('id') });
    });
    return Ressources;
}

然后服务器端只是用它创建一个新的ObjectCollection

这不会帮助我认为的任何人,但我会为后代保留这个问题。

【问题讨论】:

    标签: c# jquery json


    【解决方案1】:

    为了正确发送 json 对象,对象必须与它绑定的字段相关。

    意思是,如果你想在你的json请求中发送name,你必须定义一个'name'字段并在json请求中发送,否则你将无法成功传递。

    您需要在这里做的,要么尝试创建相关字段,以便正确使用 json,创建实体,甚至尝试在 json 集合实体中工作。

    或者,不要使用 json push,而是尝试使用 json ajax 请求,看看它是如何工作的。

    无论如何,据我所知,对您来说最快的解决方案是尽可能多地使用公共领域。

    【讨论】:

    • 我同意你的看法。不幸的是我不能改变ObjectCollection 的结构。我已经绕过编辑了我的答案。
    猜你喜欢
    • 2021-06-30
    • 1970-01-01
    • 1970-01-01
    • 2013-04-04
    • 1970-01-01
    • 1970-01-01
    • 2014-02-18
    • 1970-01-01
    • 2021-11-10
    相关资源
    最近更新 更多