c# /数据表错误使用JsonWriter:无效的JSON原语:draw

本文关键字:无效 原语 draw JSON JsonWriter 数据表 错误 | 更新日期: 2023-09-27 18:09:51

我的数据表有问题。我得到一个错误:"无效的JSON原语:绘制。"当我试图从我的web服务返回JSON。非常确定返回的JSON格式不正确,但我不确定如何纠正它。

Javascript:

 $(document).ready(function () {
        var dt = $('#example').DataTable({
            processing: true,
            serverSide: true,
            pagingType: 'full_numbers',
            ajax: {
                url: 'http://localhost:49317/WebService2.asmx/GetTableData',
                type: 'POST',
                dataType: 'json',
                contentType: 'application/json; charset=utf-8',
                dataSrc:  'data'
            },
            columns: [                    
                { data: 0 },
                { data: 1 },
                { data: 2 },
                { data: 3 },
                { data: 4 }
            ],
            order: [[1, 'asc']]
        });
HTML:

 <div>
    <table id="example" class="table table-striped table-bordered" cellspacing="0" cellpadding="2" width="100%">  
       <thead>
          <tr>
             <th>Job</th>
             <th>Customer</th>
             <th>Planner</th>
             <th>Description</th>  
              <th>SO</th>                 
          </tr>
       </thead>
       <tbody>
       </tbody>
    </table>  
</div>
后台代码:

using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Script.Services;
using System.Web.Services;
using System.Data;
using System.Data.OleDb;
using Newtonsoft.Json;
using System.IO;

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class WebService2 : System.Web.Services.WebService
{
    public class JQDTParams
    {
        public string draw { get; set; }
    }
    [WebMethod(EnableSession = true)]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet =false)]
    public string GetTableData(JQDTParams param)
    {
        var sortOrder = "asc";
        string connString = "Provider=Microsoft.ACE.OLEDB.12.0;data source=|DataDirectory|ProductionDataCopy.mdb";
        DataTable results = new DataTable();
        using (OleDbConnection conn = new OleDbConnection(connString))
        {
            OleDbCommand cmd = new OleDbCommand("SELECT * FROM ProductionData", conn);
            conn.Open();
            OleDbDataAdapter adapter = new OleDbDataAdapter(cmd);
            adapter.Fill(results);
        }
        IEnumerable<DataRow> sequence = results.AsEnumerable();
        var records = sequence.ToList();
        var orderedResults = sortOrder == "asc"
                             ? records.OrderBy(o => o["Job"])
                             : records.OrderBy(o => o["Job"]);

        StringBuilder sb1 = new StringBuilder();
        StringWriter sw = new StringWriter(sb1);
        using (JsonWriter writer = new JsonTextWriter(sw))
        {
           writer.WriteStartObject();
            writer.WritePropertyName("draw");
            writer.WriteValue(param.draw.ToString());
            writer.WritePropertyName("recordsTotal");
            writer.WriteValue(records.Count);
            writer.WritePropertyName("recordsFiltered");
            writer.WriteValue(records.Count);
            writer.WritePropertyName("data");
            writer.WriteStartArray();
            foreach (var result in orderedResults)
            {
                writer.WriteStartArray();
                //writer.WriteValue("< img class='image-details' src='content/DataTables-1.10.4/images/details_open.png' runat='server' height='16' width='16' alt='View Details'/>");
                writer.WriteValue(result["Job"]);
                writer.WriteValue(result["Customer"]);
                writer.WriteValue(result["Planner"]);
                writer.WriteValue(result["Description"]);
               //writer.WriteValue(result["so"]);
                writer.WriteValue("so");
                writer.WriteEndArray();
            }
            writer.WriteEndArray();
            writer.WriteEndObject();
            writer.Flush();
            writer.Close();
        }
        sw.Close();
        string Json = sb1.ToString();
        //JavaScriptSerializer serializer = new JavaScriptSerializer();
        //var Json = serializer.Serialize(sb1);
        return Json;
    }
}

c# /数据表错误使用JsonWriter:无效的JSON原语:draw

这种错误是由于您没有使用javascript函数或ajax数据的有效选项。您声明的函数需要一个名为param的参数。我没有尝试将结构作为webservice函数的参数,但我在webservice上工作时遇到了同样的问题。

这是我一直在使用的c#声明:

    /// <summary>
    /// Ottine la lista delle comunicazioni
    /// </summary>
    /// <returns></returns>
    [System.Web.Services.WebMethod]
    public static string GetListaPreaccettazioni(string cognome, string nome, string cf, string dtinizio, string dtfine)

我能够用这些javascript成功地调用它,还请注意,在Datatable选项数据中,我无法将正确的参数直接作为字符串传递,但我需要使用函数

        var co = $("#cognomeSearch").val();
        var no = $("#nomeSearch").val();
        var cf = $("#cfSearch").val();
        var dti = $("#dtinizioSearch").val();
        var dtf = $("#dtfineSearch").val();
            //TEST WebService
            $.ajax({
                type: "POST",
                contentType: "application/json",
                dataType: "json",
                data: "{'cognome':'" + co + "','nome':'" + no + "','cf':'" + cf + "','dtinizio':'" + dti + "','dtfine':'" + dtf + "'}",
                url: "RicercaPreaccettazioni.aspx/GetListaPreaccettazioni",
                success: function (dataj) {
                    if (dataj != null && dataj != '') {
                        console.log(dataj);
                        console.log(dataj.d);
                    }
                }
            });

                var $table = $('#TableRisultati').dataTable({
                "destroy": true,
                "ajax": {
                    type: "POST",
                    contentType: "application/json",
                    dataType: "json",
                    data: function (d) {
                        return "{'cognome':'" + co + "','nome':'" + no + "','cf':'" + cf + "','dtinizio':'" + dti + "','dtfine':'" + dtf + "'}";
                    },
                    dataSrc: function (dataj) {
                        return JSON.parse(dataj.d);
                    },
                    url: "RicercaPreaccettazioni.aspx/GetListaPreaccettazioni"
                }
            });