【发布时间】:2010-03-15 19:46:21
【问题描述】:
可能是,这对您来说不是那么麻烦。但我第一次尝试使用 json 序列化。并阅读stackowerflow中的其他文章。
我已经创建了实体框架数据模型。 然后通过方法从对象中获取所有数据:
private uqsEntities _db = new uqsEntities();
//get all data from table sysMainTableColumns where tableName=paramtableName
public List<sysMainTableColumns> getDataAboutMainTable(string tableName)
{
return (from column in _db.sysMainTableColumns
where column.TableName==tableName
select column).ToList();
}
我的网络服务:
public string getDataAboutMainTable()
{
penta.DAC.Tables dictTable = new penta.DAC.Tables();
var result = dictTable.getDataAboutMainTable("1");
return new JavaScriptSerializer().Serialize(result);
}
和jQuery ajax方法
$('#loadData').click(function() {
$.ajax({
type: "POST",
url: "WS/ConstructorWS.asmx/getDataAboutMainTable",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
$("#jsonResponse").html(msg);
var data = eval("(" + msg + ")");
//do something with data
},
error: function(msg) {
}
});
});
失败(来自 fairbug):
missing ] after element list [Break on this error] var data = eval("(" + msg + ")");
ajax 响应(如果我删除 var data = eval("(" + msg + ")"),则由 Firebug):
{"d":"[{\"ID\":1,\"TableName\":\"1\",\"Name\":\"d\",\"FullName\":\"f\",\"Type\":\"nvarchar(50)\",\"MeasurementUnit\":\"t \",\"EntityState\":2,\"EntityKey\":{\"EntitySetName\":\"sysMainTableColumns\",\"EntityContainerName\":\"uqsEntities\",\"EntityKeyValues\":[{\"Key\":\"ID\",\"Value\":1}],\"IsTemporary\":false}},{\"ID\":2,\"TableName\":\"1\",\"Name\":\"e\",\"FullName\":\"e\",\"Type\":\"int\",\"MeasurementUnit\":\"r \",\"EntityState\":2,\"EntityKey\":{\"EntitySetName\":\"sysMainTableColumns\",\"EntityContainerName\":\"uqsEntities\",\"EntityKeyValues\":[{\"Key\":\"ID\",\"Value\":2}],\"IsTemporary\":false}}]"}
数据有问题,代码在那里失败。而且我认为我没有很好地使用 JavaScriptSerializer().Serialize() 方法。
请告诉我,我在 C# 代码中犯了多大的错误?
【问题讨论】:
-
失败?失败了怎么办?顺便说一句,
eval是不必要的。 -
@Craig-Stuntz:我想,现在我的问题已经形成了。可能是 eval 不是不必要的。但是为什么 ajax 响应包含像“:\”这样的标签?
-
在我看来就像转义引号。顺便说一句,直接序列化实体是个坏主意,因为如果恰好包含循环引用,
JavaScriptSerializer就会死掉。 -
我投射到一个匿名类型上。将
select column更改为select new { Id = column.Id, // etc. -
$.each(msg.d, function ...)那个“.d”很重要!
标签: c# json entity-framework .net-3.5 jsonserializer