我正在使用WCF服务,我想用对象列表做出响应。由于我的对象是由实体框架生成的,因此我无法真正返回List,因为它有一些循环引用,并且默认序列化失败。因此,我使用匿名类型来创建一个只包含我需要的属性的对象列表。 这是我在做什么,使用Json.NET:作为Json的WCF响应在ASP.NET WebForms,使用Json.NET
[OperationContract]
public string DoWork()
{
using (X ent = new X())
{
var modules = from p in ent.Modules select new { Name = p.Name, Value = p.ID };
return JsonConvert.SerializeObject(modules);
}
}
现在,这是我的javascript这使得表内的结果:
function btn_onclick() {
var srv = new DDSProjectManagement.ProjectsService();
srv.DoWork(Res, null, null);
}
function Res(dataList) {
var divObj = document.getElementById('tablePos');
var name = 'Name';
var desc = 'Description';
var tableStart = '<table><tbody><tr><th>Name</th><th>Description</th></tr>';
var tableContent = '';
var tableEnd = '</tbody></table>';
for (var i = 0; i < dataList.length; i++) {
tableContent += '<tr><td>' + dataList[i].Name + '</td><td>' + dataList[i].Value + '</td></tr>';
}
divObj.innerHTML = tableStart + tableContent + tableEnd;
}
如果我这样做,参数的JavaScript得到只是一个字符串,它不能将它看作我的对象列表。当然,它应该是一个Json字符串,我可以尝试解析它,以便从中提取对象。但我真的想要像现在这样使用JavaScript并修改服务。例如,在下面改变我的服务会工作得很好:
public List<SimpleObject> DoWork()
{
return new List<SimpleObject>() { new SimpleObject("Florin", 1), new SimpleObject("Andrei", 2) };
}
SimpleObject不是的EntityFramework对象,因此这没有任何问题。我想默认的序列化程序是一个JSON一个,JavaScript应该基本上是相同的参数:一个JSON字符串。
所以我的问题是我如何让我的方法发送一个匿名类型对象列表给我的JS,因为通过Json.NET构建字符串不起作用? 在此先感谢。
您必须发送一个字符串,然后从JavaScript解析JSON。没有其他办法可以做到这一点。 (好吧,你可以用不同的格式序列化,就像XML一样,但它本质上是一样的问题。) – Pointy 2012-01-27 14:51:33