2010-03-15 85 views
1

也許,它對你來說沒有那麼大的問題。但我第一次嘗試json序列化。並閱讀stackowerflow中的其他文章。JavaScriptSerializer()。Serialize(實體框架對象)

我已經創建了實體框架數據模型。 然後通過方法從對象獲取的所有數據:

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(); 

} 

我的web服務:

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 + ")")):

{"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#代碼中犯了什麼大錯誤?

+0

失敗?失敗如何?順便說一句,'eval'是不必要的。 – 2010-03-15 19:50:01

+0

@ Craig-Stuntz:我想現在我的問題現在已經形成。可能是不必要的評估。但爲什麼ajax Responce包含像「:\」這樣的標籤? – loviji 2010-03-15 20:03:15

+1

在我看來像逃避引號。順便說一句,直接序列化實體是一個壞主意,因爲如果恰好包含循環引用,JavaScriptSerializer將會死亡。 – 2010-03-15 20:12:55

回答

3
  1. 你不需要eval。 jQuery爲您指定dataType: "json"
  2. 將實體直接序列化是一個壞主意,因爲如果碰巧包含循環引用,則JavaScriptSerializer將會死亡。
  3. 不要忘了d!當根對象是一個數組時,它被WCF服務插入以解決某些瀏覽器中的安全漏洞。
+0

想知道那個'd'。知道我在哪裏可以找到更多關於這方面的信息? – 2011-05-03 06:17:34

+0

這是一個安全特性,因爲頂級數組可以在用GET獲取時在JavaScript中受到攻擊。除非明確地將其打開,否則'return Json'在MVC 2中無法與GET請求一起工作。 – 2011-05-04 12:53:07

0

您是否嘗試過使用Firebug或Fiddler進行調試以查看JSON內容的外觀?

+0

是的,對不起,我忘了公佈。請問,whatch有問題的內容 – loviji 2010-03-15 19:51:03