从 .NET 到 jqGrid 的 JSON 数据出现问题

本文关键字:数据 问题 JSON NET jqGrid | 更新日期: 2023-09-27 18:34:51

我有一个动态函数来生成表数据到 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);
                },

并且正在从第一行也是最后一行的第一列中被写掉......

我做错了什么以及如何获取项目序列化

从 .NET 到 jqGrid 的 JSON 数据出现问题

首先是服务器响应

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

是错误的。正确的数据应该是项目数组,例如

[
    {
        "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 });