Как вернуть DataTable из .Net Web Service? - PullRequest
3 голосов
/ 22 мая 2009

Мне удалось вернуть HashTable из веб-службы, которую я настроил для .Net 2.0, но службе не удалось перенастроить DataTable в JSON. Я продолжаю получать следующую ошибку: «Обнаружена круговая ссылка при сериализации объекта». Любые советы?

 [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;

}

Ответы [ 2 ]

1 голос
/ 22 мая 2009

Циркулярная ссылка, вероятно, обусловлена ​​тем, что DataTable имеет свойство Columns, а каждый объект DataColumn имеет свойство Table.

Информация в этом сообщении в блоге Рика Стрэла может вам помочь, возможно.

0 голосов
/ 14 февраля 2019

Просто быстрое повторное посещение этого старого вопроса ... Я делаю это так:

var header = datatable.Columns.Cast<DataColumn>().Select(r => new KeyValuePair<string, object>(r.ColumnName, r.DataType.Name));
var data = datatable.Select().AsEnumerable()
    .Select(r => r.Table.Columns.Cast<DataColumn>()
        .Select(c => new KeyValuePair<string, object>(c.ColumnName, r[c.Ordinal] is DBNull ? null : r[c.Ordinal] )
    ).ToDictionary(z=>z.Key,z=>z.Value)
);

return new DatatableRequestResponse
{
    data = data,
    header = header
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...