0

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

并且被写在第一列的第一列,也是唯一的一行....

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

4

1 回答 1

0

首先是服务器响应

{
    "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 });
于 2013-10-11T15:47:22.307 回答