如何从.NETWeb服务返回数据表?

如何从.NETWeb服务返回数据表?,.net,web-services,json,datatable,.net,Web Services,Json,Datatable,我已经能够从为.NET2.0设置的Web服务返回哈希表,但该服务无法在JSON中重新运行DataTable。我一直收到以下错误:“序列化对象时检测到循环引用”。有什么建议吗 [WebMethod(EnableSession = true) ] public DataTable getSavedAddresses() { DataTable dt = new DataTable(); if (Session["ClientID"] != null) { i

我已经能够从为.NET2.0设置的Web服务返回哈希表,但该服务无法在JSON中重新运行DataTable。我一直收到以下错误:“序列化对象时检测到循环引用”。有什么建议吗

 [WebMethod(EnableSession = true) ]
public DataTable getSavedAddresses()
{
    DataTable dt = new DataTable();
    if (Session["ClientID"] != null)
    {
        int clientId = Convert.ToInt32(Session["ClientID"]);
        dt = Address.GetClientShippingAddresses(clientId);
    }
    return dt;

}循环引用可能是由于
DataTable
具有
Columns
属性,并且每个
DataColumn
对象都具有
Table
属性


中的信息可能会对您有所帮助。

请快速重温一下这个老问题。。。 我是这样做的:

var header=datatable.Columns.Cast().Select(r=>newkeyvaluepair(r.ColumnName,r.DataType.Name));
var data=datatable.Select().AsEnumerable()
.Select(r=>r.Table.Columns.Cast()
.Select(c=>newkeyvaluepair(c.ColumnName,r[c.Ordinal]为DBNull?null:r[c.Ordinal])
).ToDictionary(z=>z.Key,z=>z.Value)
);
返回新的DatatableRequestResponse
{
数据=数据,
页眉=页眉
};

我想我会尝试使用XML来代替。我认为这个答案表明需要一个自定义序列化程序。这就是Rick Strahl在博客文章中所做的,首先使用JSON.NET,然后使用内置的JavaScriptSerializer库。