javascriptserializer (). تسلسل (كائن إطار الكيان)
-
20-09-2019 - |
سؤال
قد يكون، ليس مشكلة مشكلة بالنسبة لك. لكنني أحاول لأول مرة مع تسلسل JSON. وأيضا قراءة المواد الأخرى في stackowerflow.
لقد قمت بإنشاء نموذج بيانات إطار الكيان. ثم حسب الطريقة احصل على جميع البيانات من كائن:
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();
}
بلدي webservice:
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 (بواسطة 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 (). تسلسل () طريقة جيدة جدا.
من فضلك، أخبرني، يا لها من خطأ كبير صنعته في كود C #؟
المحلول
- لا تحتاج
eval
. وبعد jQuery يفعل ذلك من أجلك عندما تحددdataType: "json"
- إنها فكرة سيئة لكيانات تسلسل مباشرة
JavaScriptSerializer
سوف تموت إذا حدث أحد احتواء مرجع دائري. - لا تنسى
d
في يتم إدراجها بواسطة خدمات WCF للتغلب على ثقب أمان في بعض المتصفحات عندما يكون كائن الجذر صفيفا.
نصائح أخرى
هل حاولت تصحيح الأخطاء مع Firebug أو Fiddler لمعرفة ما يبدو محتوى JSON؟
لا تنتمي إلى StackOverflow