JavaScriptSerializer()。Serialize(Entity Framework对象)

时间:2010-03-15 19:46:22

标签: c# json entity-framework .net-3.5 jsonserializer

可能,对你来说不是那么成问题。但我第一次尝试使用json序列化。并阅读stackowerflow中的其他文章。

我创建了Entity Framework数据模型。 然后通过方法从对象获取所有数据:

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#代码中犯了一个大错误?

2 个答案:

答案 0 :(得分:3)

  1. 您不需要eval。当您指定dataType: "json"
  2. 时,jQuery会为您执行此操作
  3. 直接序列化实体是一个坏主意,因为如果恰好包含循环引用,JavaScriptSerializer将会死亡。
  4. 不要忘记d!当根对象是一个数组时,由WCF服务插入,以解决某些浏览器中的安全漏洞。

答案 1 :(得分:0)

您是否尝试使用Firebug或Fiddler进行调试以查看JSON内容的外观?