كيف يمكنك إجراء تسلسل لكائنات جافا سكريبت بطرق تستخدم JSON؟

StackOverflow https://stackoverflow.com/questions/109769

  •  02-07-2019
  •  | 
  •  

سؤال

أنا أبحث عن تحسين لـ JSON والذي سيؤدي أيضًا إلى إجراء تسلسل للطرق.لدي كائن يعمل كمجموعة من الكائنات، وأرغب في إجراء تسلسل لأساليب كائن المجموعة أيضًا.حتى الآن لقد حددت موقع ClassyJSON.أي أفكار؟

هل كانت مفيدة؟

المحلول

لا أعتقد أن طرق التسلسل فكرة جيدة على الإطلاق.إذا كنت تنوي تشغيل التعليمات البرمجية على جانب الخادم، فإنك تعرض نفسك للهجمات.إذا كنت تريد تشغيله من جانب العميل، فمن الأفضل أن تستخدم الأساليب المحلية فقط، وربما تشير إلى اسم الطريقة التي ستستخدمها في الكائنات المتسلسلة.

أنا أؤمن رغم ذلك "f = "+function() {} سينتج لك إصدارًا لسلسلة يمكنك تقييمه:

var test = "f = " + function() { alert("Hello"); };
eval(test)

وللتعامل الجيد مع json، أوصي باستخدام النموذج الأولي، الذي يحتوي على طرق رائعة لتسلسل الكائنات إلى json.

نصائح أخرى

حاول الابتعاد دون إجراء تسلسل لرمز جافا سكريبت.بهذه الطريقة يكمن عالم من الألم.سيكون تصحيح الأخطاء أسهل كثيرًا إذا كان من الممكن أن تأتي التعليمات البرمجية من ملفات ثابتة فقط، وليس من قاعدة بيانات.بدلاً من ذلك، قم بتوجيه استجابات JSON الخاصة بك بعد استلامها وتمرير البيانات المناسبة إلى منشئي الكائنات المناسبين.

إذا كان يجب عليك إجراء تسلسل لها، فإن استدعاء toString() على دالة سيعيد مصدرها.

إذا كنت تستخدم إطار عمل WCF لتطوير خدمة ويب RESTful، فمن السهل جدًا تحقيق ذلك.ما عليك سوى إنشاء فئات بنية البيانات الخاصة بك مع المجموعة المطلوبة باستخدام سمات DataContract وDataMember.

[DataContract]
public class Foo
{
    [DataMember]
     public string FooName {get;set;}
    [DataMember]
     public FooItem[] FooItems {get;set;}
}


[DataContract]
public class FooItem
{
    [DataMember]
    public string Name {get;set;}
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top