将.Net对象转换为JSON

时间:2014-02-09 21:27:28

标签: c# json

从Web服务方法我返回一个'GridBindingDataSet'类型的对象。但它没有自动序列化为JSON。

有没有办法确保对象被序列化为JSON?我正在使用支持AJAX的Web服务,可以使用jQuery从客户端调用。

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

编辑1: 从jQuery调用Web服务方法时出现以下错误:

在序列化“System.Reflection.RuntimeModule”类型的对象时检测到循环引用

编辑2: 我使用JSON.net来序列化GridBindingDataSet的上述对象。 Web服务现在返回一个字符串而不是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}]}"}

1 个答案:

答案 0 :(得分:1)

另外值得看看Json.Net,很多人会说最好的Json序列化程序之一,我将它用于我的所有项目。

回应循环引用时,请查看文档中的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"
//       }
//     }
//   ]
// }