2014-02-09 7 views
1

Из метода веб-службы я возвращаю объект типа «GridBindingDataSet». Но он не становится сериализованным как JSON автоматически.Преобразование объекта .Net в JSON

Есть ли способ убедиться, что объект сериализуется как JSON? Я использую веб-службу с поддержкой AJAX, которую можно вызывать с клиентской стороны с помощью jQuery.

public class GridBindingDataSet 
{ 
    public int TotalCount { get; set; } 
    public DataTable Data { get; set; } 
} 

РЕДАКТИРОВАТЬ 1: Я получаю следующее сообщение об ошибке, когда метод веб-сервис вызывается из JQuery:

Круговой ссылка была обнаружена при сериализации объект типа «System.Reflection.RuntimeModule '

EDIT 2: Я использовал JSON.net для сериализации вышеуказанного объекта GridBindingDataSet. Теперь веб-служба возвращает строку, а не GridBindingObject. Код для этого приведен ниже. Но браузер не может понять d.TotalCount и d.Data, даже если они есть в JSON.

[WebMethod] 
public string GetJSONDataSetForGrid() 
{ 
    ... 
    ... 
    DataTable dt = GetDataForPage0(); 
    int total = GetTotalCount(); 
    GridBindingDataSet gridBindingData = new GridBindingDataSet (total, dt); 

    //return a JSON serialized string 
    return JsonConvert.SerializeObject(gridBindingData, 
    Formatting.None, new JsonSerializerSettings 
     { 
     PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None 
    }); 
} 

Но JSON возвращается полна обратной косой черты, которые браузер не интерпретируют, так как сетка, используя строку JSON показывает вверх как пустые. d.Data и d.TotalCount не анализируются из строки JSON. JSON настраивали, как показано ниже:

{"d":"{\"TotalCount\":81,\"Data\":[{\"ProductName\":\"Alice Mutton\",\"UnitPrice\":39.00, 
\"UnitsInStock\":0,\"Discontinued\":true},{\"ProductName\":\"Aniseed Syrup\",\"UnitPrice\":10.00, 
\"UnitsInStock\":13,\"Discontinued\":false}]}"} 
+0

JSON.net кажется хорошо с ним http://stackoverflow.com/questions/2979922/how- to-convert-datatable-to-json-string-using-json-net .. не уверен, как вы подключили бы его в своем случае «метод веб-службы». – ziya

+0

'Но его не получается сериализованным как JSON автоматически', не очень описательным. Вы получили сообщение об ошибке? Что вы не ожидаете? –

+0

@ L.B - Я добавил ошибку, которую вижу под EDIT 1 моего сообщения. – Sunil

ответ

1

Кроме того, его стоит иметь взгляд на Json.Net, многие сказали бы один из лучших сериализаторов JSon доступны, я использую его для всех моих проектов.

В ответ на круговой Referece взглянуть на preserving references в документации, из их примеров:

Directory root = new Directory { Name = "Root" }; 
Directory documents = new Directory { Name = "My Documents", Parent = root }; 

File file = new File { Name = "ImportantLegalDocument.docx", Parent = documents }; 

documents.Files = new List<File> { file }; 

string preserveReferenacesObjects = JsonConvert.SerializeObject(documents, Formatting.Indented, new JsonSerializerSettings 
{ 
    PreserveReferencesHandling = PreserveReferencesHandling.Objects 
}); 

// { 
// "$id": "1", 
// "Name": "My Documents", 
// "Parent": { 
//  "$id": "2", 
//  "Name": "Root", 
//  "Parent": null, 
//  "Files": null 
// }, 
// "Files": [ 
//  { 
//  "$id": "3", 
//  "Name": "ImportantLegalDocument.docx", 
//  "Parent": { 
//   "$ref": "1" 
//  } 
//  } 
// ] 
// } 
+0

Как насчет * круглых ссылок *? Хотя Json.Net может справиться с этим очень хорошо, а не как вы опубликовали. –

+0

ive обновил мой пример в соответствии с вашим комментарием, спасибо за отзыв. – shenku

+0

Теперь недостающая часть: как OP будет использовать это в своем коде? (Оба в aspx & jQuery) –

Смежные вопросы