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 #?

Était-ce utile?

La solution

  1. Vous n'avez pas besoin eval. jQuery est-ce que pour vous lorsque vous spécifiez dataType: "json"
  2. 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.
  3. 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?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top