【问题标题】:Issue with JSON data from .NET to jqGrid从 .NET 到 jqGrid 的 JSON 数据问题
【发布时间】:2013-10-11 13:02:15
【问题描述】:

我有一个动态函数来生成 JSON 的表数据,这有点用,现在我尝试将它添加到 .NET 中的列表中,但是过去几天我无法做到这一点,有人知道我做错了什么吗?

输出是这样的:

[{"itemsSerialized":"{\"id\":1,\"name\":\"Medical 1\",\"city\":\"Kiev\",\"instituteTypeId\": 0}"},{"itemsSerialized":"{\"id\":2,\"name\":\"Medical 2\",\"city\":\"Kherson\",\"instituteTypeId\" :0}"}]

应该没有"itemsSerialized":",我明白它来自哪里,但不明白为什么一个对象声明突然出现在我的 JSON 字符串中

我的 C# 代码:

Object itemsSerialized = "";
        foreach (DataRow r in _data.Rows)
        {
            DynamicClass dynamicClass = new DynamicClass();
            dyna.ConvertRowToCustomer(r, out dynamicClass);
            DynamicClassList.Add(dynamicClass);
            var iSerializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            itemsSerialized = JsonConvert.SerializeObject(dynamicClass.Property.properties);
            Object itemsSerialized2 = JsonConvert.DeserializeObject(xJSON);
            Gridist.Add(new { itemsSerialized });
        }

使用 jQuery 我可以将数据加载到 jQGrid 中:

$.ajax({
        type: "POST",
        contentType: "application/json",
        url: "dataServices/objects.asmx/InvokeData",
        data: "{ 'q': 'med&1'}",
        dataType: 'json',
        success: function (result) {
            var str = result.d;
            alert(result.d);
            $("#jqGrid_2")[0].addJSONData(result.d);
        }
    });

我现在的回报为:

{"id":1,"name":"Medical 1","city":"Kiev","instituteTypeId":0},{"id":2,"name":"Medical 2", "city":"Kherson","instituteTypeId":0}

更新内部 AJAX 版本:

  mtype: 'POST',
                contentType: "application/json",
                url: "dataServices/objects.asmx/InvokeData",
                ajaxGridOptions: {
                    contentType: 'application/json; charset=utf-8'
                },
                postData: JSON.stringify({q: "med&1"}),
                loadonce: true,
                dataType: 'json',
                jsonReader: {
                    root: function (obj) {
                        alert(obj.d);
                        return obj.d;
                    },
                    page: "",
                    total: "",
                    records: function (obj) {
                        return obj.d.length;
                    },
                },
                gridview: true,
                loadError: function (xhr, status, error) {
                    alert('load error: ' + error);
                },

并且正在第一行的第一列中被写掉......

我做错了什么以及如何将项目序列化出来

【问题讨论】:

    标签: c# json list jqgrid


    【解决方案1】:

    首先是服务器响应

    {
        "id": 1,
        "name": "Medical 1",
        "city": "Kiev",
        "instituteTypeId": 0
    },
    {
        "id": 2,
        "name": "Medical 2",
        "city": "Kherson",
        "instituteTypeId": 0
    }
    

    错了。正确的数据应该是 array 的项目,如

    [
        {
            "id": 1,
            "name": "Medical 1",
            "city": "Kiev",
            "instituteTypeId": 0
        },
        {
            "id": 2,
            "name": "Medical 2",
            "city": "Kherson",
            "instituteTypeId": 0
        }
    ]
    

    您发布的另一个 JSON 响应包含两个问题。 1)"itemsSerialized":"前缀 2)所有项目的值都是字符串

    [
        {
            "itemsSerialized": "{\"id\":1,\"name\":\"Medical 1\",\"city\":\"Kiev\",\"instituteTypeId\":0}"
        },
        {
            "itemsSerialized": "{\"id\":2,\"name\":\"Medical 2\",\"city\":\"Kherson\",\"instituteTypeId\":0}"
        }
    ]
    

    第一个问题的原因是使用

    Gridist.Add(new { itemsSerialized });
    

    而不是

    Gridist.Add(itemsSerialized);
    

    第二个问题的原因是不需要使用JsonConvert.SerializeObject。你应该做的是像

    Gridist.Add(dynamicClass.Property.properties);
    

    而不是

    itemsSerialized = JsonConvert.SerializeObject(dynamicClass.Property.properties);
    Gridist.Add(new { itemsSerialized });
    

    【讨论】:

    • 你好奥列格,现在试试
    • Pfffh,没看到这个,盯着这个 2 天 :S 非常感谢你的 cmets
    • @JaapTerlouw:不客气!我还建议您稍微更改一下代码。您应该删除addJSONData 的使用,并将datatype: 'json' 与包含root: function (obj) { return obj.d; }jsonReader 一起使用。请参阅the answerthis one 和许多其他内容。此外,您可以添加loadonce: true 选项。
    • 我在 jqGrid 之外有 ajax,我可以在 ajax 中添加它吗?
    • $("#jqGrid_2")[0].addJSONData(result.d);这应该是 $("#jqGrid_2")[0].(result.d);?
    猜你喜欢
    • 2014-07-08
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多