JavaScriptSerializer (). Serialize (объект Entity Framework) - PullRequest
1 голос
/ 15 марта 2010

Может быть, это не так проблематично для вас. но я пытаюсь в первый раз с сериализацией 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) {

                }
            });
        });

Fails (от Fairbug):

missing ] after element list [Break on this error] var data = eval("(" + msg + ")");

Ответ ajax (от Firebug, если я удалю 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 #?

Ответы [ 2 ]

3 голосов
/ 16 марта 2010
  1. Вам не нужно eval. JQuery делает это для вас, когда вы указываете dataType: "json"
  2. Это плохая идея, чтобы сериализовать сущности напрямую, так как JavaScriptSerializer умрет, если кто-то будет содержать круговую ссылку.
  3. Не забудьте d! Он вставляется службами WCF для обхода дыры в безопасности в некоторых браузерах, когда корневой объект является массивом.
0 голосов
/ 15 марта 2010

Вы пробовали отладку с помощью Firebug или Fiddler, чтобы увидеть, как выглядит контент JSON?

...