JavaScriptSerializer (). Serialize (objet Entity Framework)
-
20-09-2019 - |
Question
Peut-être, il est pas si problématique pour vous. mais je suis en train première fois avec sérialisation JSON. et aussi lire d'autres articles en stackowerflow.
J'ai créé le modèle de données Entity Framework. puis par la méthode obtenir toutes les données de l'objet:
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();
}
mon webservice:
public string getDataAboutMainTable()
{
penta.DAC.Tables dictTable = new penta.DAC.Tables();
var result = dictTable.getDataAboutMainTable("1");
return new JavaScriptSerializer().Serialize(result);
}
et jQuery méthode 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) {
}
});
});
échoue (de fairbug):
missing ] after element list [Break on this error] var data = eval("(" + msg + ")");
Réponse ajax (par Firebug si je retire 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}}]"}
problème avec des données , le code échoue là. et je pense que je ne suis pas avec JavaScriptSerializer (). Serialize () méthode très bien.
S'il vous plaît, dites-moi, qu'est-ce une grosse erreur que j'ai fait dans le code C #?
La solution
- Vous n'avez pas besoin
eval
. jQuery est-ce que pour vous lorsque vous spécifiezdataType: "json"
- Il est une mauvaise idée de sérialisation entités directement
JavaScriptSerializer
va mourir si l'on arrive à contenir une référence circulaire. - Ne pas oublier le
d
! C'est inséré par les services de WCF pour travailler autour d'un trou de sécurité dans certains navigateurs lorsque l'objet racine est un tableau.
Autres conseils
Avez-vous essayé le débogage avec Firebug ou Fiddler pour voir ce que le contenu JSON ressemble?