【发布时间】:2014-01-06 03:51:26
【问题描述】:
我的 JSON 作为转义字符串返回,我想要没有反斜杠和外引号的对象。我确定我缺少演员表或一些简单的东西,但我会将完整的代码放在这里以避免误解。
我正在尝试通过 ajax/JSON/asmx Web 服务将一些数据导入 Infragistics Ignite UI 网格。我有数据返回,但格式不正确。我不确定问题出在我的 ajax js 或 c# 方法返回类型(字符串)还是 JSON 序列化?
以下是我如何使用 jquery ajax 调用来调用 Web 服务:
var jqxhr = $.ajax(
{
type: 'POST',
contentType: "application/json; charset=utf-8",
url: "/WebMethods/AssetWebService.asmx/GetAssets",
dataType: "json",
success: success,
error: function (xhr, msg) { alert(msg + '\n' + xhr.responseText); }
});
function success(msg) {
var entityColumns = getColumns();
var entityData = msg.d;
gridSetup(entityData, entityColumns);
}
function gridSetup(entityData, entityColumns) {
$("#assetGrid").igGrid(
{
autoGenerateColumns: false,
autoGenerateLayouts: false,
dataSource: entityData,
columns: entityColumns
}
);
}
Webservice c# 代码从实体框架获取对象:
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class AssetWebService : System.Web.Services.WebService
{
[WebMethod]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public string GetAssets()
{
List<Asset> Assets = new List<Asset>();
using (var db = new CognyxMES())
{
Assets = db.Assets.ToList();
}
var results = from a
in Assets
select new
{
Id = a.Id,
Name = a.Name,
AssetTypeId = a.AssetTypeId
};
return results;
}
}
当我在 VS2013 中调试时,返回的 JSON 看起来像这样(这导致我的网格不显示任何数据):
"[{\"Id\":3,\"Name\":\"My Asset\",\"AssetTypeId\":1}]"
当我硬编码时,我希望它看起来像这样,因为我的网格可以正常工作:
[{ "Id": 3, "Name": "My Asset", "AssetTypeId": 1 }]
我是 C# 的 JSON 新手,所以我知道我可以使用字符串替换或类似的方法将其破解到位,但我正在寻求更优雅的修复并解释我所缺少的内容。谢谢
【问题讨论】:
标签: c# ajax json web-services entity-framework