سؤال

باستخدام Protobuf-Net، أرى أنه لا يبدو ممكنا لتحمل فئة دون وجود منشئ بلا حدود أو قد أفتقد شيئا ما؟

لا أريد بعض الفصول مع منشئ غير رسمي. هل هناك نوع من السمات التي يمكنني استخدامها أو بعض التقنيات الأخرى؟

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

المحلول

يعتمد Protobuf-Net حاليا على وجود منشئ بلا حدود للعمل.

ومع ذلك فإن هذا المنشئ لا يلزم أن يكون عام (وسوف تستخدم التفكير إذا كنت بحاجة لاستدعاء ذلك) لذلك قد تتمكن من تحديد المنشئ الخاص المطلوب فقط للاستخدام من قبل Protobuf-Net (إضافة تعليق حول السبب) والتعامل مع القضايا ذات الصلة بالمسلعة هناك.

هذا يبقي بقية واجهة برمجة التطبيقات الخاصة بك من القدرة على بناء حالات "غير قانونية".

يشير Marc إلى أنه إذا كنت تتحدث عن كائن الرسالة الخارجي، فيمكنك أيضا إنشاء الكائن بنفسك واستدعاء Serializer.Merge. ولكن إذا كان يحتاج إلى إنشاء كائن (نظرا لأنه يحتوي حاليا على مثيل فارغ أو عناصر جديدة في قائمة / صفيف)، فبحث عن منشئ افتراضي.

نصائح أخرى

ShuggyCouk هو الصحيح في ذلك باستخدام منشئ المعلمات.

فقط للكمال، على الرغم من - إذا كنت تتحدث عن نحو الخارجي كائن الرسالة، يمكنك أيضا إنشاء الكائن بنفسك واتصل Serializer.Merge. وبعد ولكن إذا كان يحتاج إلى إنشاء كائن (لأنه يحتوي حاليا على null مثيل أو عناصر جديدة في قائمة / صفيف)، ثم يبحث عن منشئ افتراضي.

أنا يفترض أنه يمكنني أيضا توفير بعض العلامات في السمة ليقول "مجرد إنشاء كائن الخام عبر FormatterServices"، ولكن هذا يشعر غير ضروري (مقارنة بنسخة غير رسمية غير رسمية)، وقد لا تعمل على جميع المنصات (Silverlight، CF، وما إلى ذلك - مشاكل محتملة).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top