我正在使用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