如何在asp.net中序列化通用列表,以便jQuery DataTables可以接受它?

时间:2015-11-17 15:43:25

标签: javascript jquery asp.net datatables

让我们说我已经设置了这样的东西:

narudzbe.aspx.cs

a

narudzbe.aspx - javascript

[WebMethod]
public static string getAllPartnere(int kid)
{
 string json = string.Empty;
 List<stp_WEB_MP_PARTNERI_GetPartneriDDList_Result> partnerList = new List<stp_WEB_MP_PARTNERI_GetPartneriDDList_Result>();
 partnerList = DANarudzbe.GetPartnerList(kid);
 json = JsonConvert.SerializeObject(partnerList, new Newtonsoft.Json.Converters.StringEnumConverter());
 return json;
}

narudzbe.aspx - html

$.ajax({
    type: "POST",
    url: "/Narudzbe/narudzbe.aspx/getAllPartnere",
    data: '{kid:"' + Partner_ID + '"}',
    dataType: "json",
    contentType: "application/json; charset=utf-8",
    success: function (msg) {
        $('#partneri').DataTable({
    data: msg.d,
    columns: [
        { title: "PartnerID" },
        { title: "Naziv" }
    ]
});
}                    
});

我需要知道如何使用json.net序列化通用列表,以便所有值都用引号括起来,以便返回的列表被序列化,以便数据表能够读取它。

序列化列表在像我这样序列化时没有引号中的数值,因此数据表获得了一些&#34;引号被认为是值。

我还需要说明这是我第一次使用数据表而不是开发人员,所以请放轻松。

说实话,我也想知道这是否是在使用ajax和服务器处理的数据表中使用的正确方法,或者是否更简单,更简单。

1 个答案:

答案 0 :(得分:1)

我认为您的数值没有问题,因为它们是正确序列化的,因为它们是数值,这是默认行为。您可以在this jsfiddle中检查它是否没有问题 检查前十行,只有整数值,显示正确。

然而,要回答你的问题。 没有转换器或其他一些简单的方法来说json.net如何将你的数字转换成字符串(就像日期一样,或者像你自己的例子那样枚举)。 您必须编写自己的转换器,如here所示。 但这看起来像是开销。

如果您的原始类不是那么大,我会创建一个包含所有字符串属性的副本。

public class SerializablePartner
{
    public string PartnerId { get; set; }
    public string Naziv { get; set; }
    // your other properties
    public SerializablePartner(stp_WEB_MP_PARTNERI_GetPartneriDDList_Result originalItem)
    {
        // map your values here 
        this.PartnerId = originalItem.PartnerId.ToString();
        this.Naziv = originalItem.Naziv; // already a string, no need for change
        // your other properties
    }
}

这样你的所有属性肯定都用双引号括起来,就像json.net一样,它们都是字符串。 当然还有你的原创 的伙伴名单 必须转换为List&lt; SerializablePartnerList&gt;在进行json转换之前。 像这样:

return JsonConvert.SerializeObject(partnerList.Select(partner => new SerializablePartner(partner)).ToList());