تخزين البيانات في ملفات C # المصدر مقابل XML وما إلى ذلك ...؟

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

سؤال

هذا سؤال ج.

كنت أتجول فقط إذا حاول أي شخص تخزين بياناتها (مثل ملفات التكوين على سبيل المثال)، في ملف * .cs، بدلا من XML؟

أنا حقا أكره XML. الفكرة برمتها من تحليل هيكل تشبه HTML في كل مرة تحتاج فيها إلى بعض البيانات تبدو غبية.

هل هناك بدائل خفيفة الوزن (مثل yaml) إلى XML؟ في حالتي، أحتاج فعليا إلى تخزين بعض البيانات لمستوى (لعبة)، حيث توجد الكثير من الكائنات المختلفة، وأنواع التضاريس، إلخ ... في ملف مسطح، حتى أتمكن من قراءتها لاحقا.

أعتقد أنني يمكن أن تسلسل بلدي مستوى فئة، ولكن أريد أن تكون ملف البيانات قابلة للتحرير في أي محرر نصوص على سبيل المثال.

سيكون أي مساعدة موضع ترحيب، شكرا!

ملاحظة: فيما يتعلق بملفات .cs، نسيت أن أذكر أنني أريد القدرة على إنشاء المستويات الجديدة (وحفظها) في اللعبة، من خلال محرر.

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

المحلول

نظرا لأنك لا ترغب في استخدام XML، فسوف أوصي بإنشاء تنسيق الملف الخاص بك هو نص قابل للتحرير.

PROPERTIES
name = First Level
number = 1
END

MONSTERS
Barbarian
pos = (3, 6)
health = 2

Dragon
pos = (10, 10)
health = 8
END

وهكذا إلى إذن من أجل أي شيء تحتاج إليه.

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

نصائح أخرى

لقد كنت أعمل في صناعة الألعاب لسنوات، ونحن نستخدم XML لأنه حصل على أفضل دعم للأداة. يتم استخدام ملفات Yaml أو INI للتشكيلات، ولكن يتم تخزين بيانات اللعبة في XML. بالطبع عادة ما يكون لدينا أدوات تحويل XML في التعليمات البرمجية الثنائية، لألعاب الشحن، ولكن أثناء التطوير وأدوات لعبة مخصصة تطوير XML ببساطة الصخور.

أحيانا XML هو المطرقة المناسبة لاحتياجاتك، لا تضع التحيز على التقنيات لمجرد أنهم ليسوا الأفضل في بعض الحقول (يقول تعريف AJAX (النقل) مقابل البيانات)

لماذا لا (XML)؟

لا أرى حالة لعدم استخدام XML، بالنظر بشكل خاص في تخزين أنواع مختلفة من المعلومات في الملف.

ومع ذلك، بالنسبة لنقل ملفات .cs، أقترح هيكلة رمز التطبيق الخاص بك بحيث تقوم بتحميل التعليمات البرمجية التي تهيئ البيانات التي تحتاجها، بدلا من البحث عن بيانات في الملفات. يمنحك نمط واضح (ترجمة + تحميل)، حيث تقوم الآن بتحميل فئة التهيئة، بدلا من النظر إلى البيانات في ملف. أضف قدر الإمكان لجعل التكوين هناك بسيطة قدر الإمكان.

ملفات ini؟

[section]
key=value

بعد قراءة سؤالك أكثر قليلا والتفكير في الأمر، فإن XML هو قياسي للغاية في صناعة الألعاب كما هو منظم، يدعم الأطفال، فضلا عن التعبير القابل للتحرير من قبل أي محرر نصوص.

بعض الألعاب التي تتبادر إلى الذهن التي تستخدم ملفات XML:

عالم علب
crysis.
القيادة والتغلب 3

الفكرة برمتها من تحليل هيكل تشبه HTML في كل مرة تحتاج فيها إلى بعض البيانات تبدو غبية.

إذا لم تكن ستستخدم XML أو YAML، فسوف تضطر إلى كتابة المحلل المحلل والمصادقة الخاصة بك، والآن دخلت الأرض التي يسود فيها غبي. XML مزعج مثل جميع الخروج، ولكن القيام دون النظام البيئي لأدوات التلاعب به هو أسوأ.

نحب JSON لملفات التكوين - من المستغرب بشكل مدهش.

من السهل التحرير، من السهل التحليل وتولد (بما في ذلك المكتبات القوية ل .NET - كل من مرض التصلب العصبي المتعدد في كل من MS و 3RD)، وهو قوي للغاية - نوع من XML مع أنواع بيانات أساسية جيدة.

دونو إذا سمعت منه من قبل، ولكن يجب عليك التحقق من هذا الشيء YAML. انها رائعة تماما، مع its own homepage وكل شيء.

إذا كانت بياناتك ليست معقدة للغاية أو هرمية، فيمكنك تخزينها بتنسيق ملف خصائص مثل هذا:

level.name=My Level
level.mapfile=Map.txt

إلخ.

من ناحية أخرى، فإن XML سهل حقا العمل مع C # مع تسلسل (Iserializable أو DataContract)، فلا تضطر إلى كتابة أي رمز تحليل، فإن الإطار يفعل كل شيء من أجلك. تحرير XML في محرر النص لا يمكن أن يكون هذا سيئا!

إذا كنت على استعداد للتنازل عن XML قليلا، فيمكنك استخدام namevaluecollection. لعقد عناصر التكوين الخاصة بك. يمكنك بعد ذلك تسلسل هذا باستخدام تسلسل .NET المدمج. سيكون الملف XML، لكنه سيكون في شكل بسيط للغاية وسهل تحرير، ولن تقلق للقلق بشأن أي تحويلات من النوع اليدوي / التحقق من الصحة.

يعتقد XML، في كثير من الأحيان، غالبا ما يكون الخيار الأفضل لتخزين البيانات في ملف، ولا يقوم LinQ for XML بإجراء قراءة وكتابة تلك البيانات أسهل بكثير.

خيار آخر إذا أصبحت بياناتك معقدة للغاية، فستكون استخدام شيء مثل SQLite، لقد استخدمت هذا من قبل ولوصول المستخدم الوحيد الذي هو سريع للغاية وسهل الاستخدام.

يبدو أنك تريد نسبة ثنائية يمكن تحريرها في محرر نصوص. لسوء الحظ (إلى أن يكون الجميع يجيد محرر عرافة)، فهناك مفاضلة لا مفر منها بين السرعة وسهولة التحرير.

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

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

إذا كنت تستخدم نظام تكوين .NET، فإنه يقوم بتحليل XML لك. يرى كيفية: إنشاء أقسام التكوين المخصص باستخدام تكوينات. وبعد على الرغم من أنه في قسم ASP.NET، فإنه قابل للتطبيق على جميع كود .NET.

من الناحية الفنية لا تحتاج إلى تحليل XML، ما عليك سوى إنشاء نموذج بيانات ثم تسلسل في XML والتحيز من XML. من السهل أيضا إنشاء محرر في Visual Studio لنموذج البيانات من خلال وجود برنامج TreeView أو ListView يعرض كل عنصر / كائن في طراز البيانات واستخدم عرض خاص لتحرير خصائص الكائن المحدد. استخدم OpenFileDialog و SaveFiledialog للسماح للمستخدم بتحديد ملف XML و XMLSerializer لتحميل وحفظ نموذج البيانات الخاص بك. حقا غير مؤلم أنا أؤكد لك! :-)

أعمل في صناعة الألعاب ونحن نستخدم XML حصريا للغاية للقيام بما تصفه.
إليك لماذا:
1. من المفهوم جيدا وهو معيار
2. لديها دعم ممتاز من حيث المكتبات
3. يمكن التحقق من صحة - هذا ضروري عند إنشاء محرري البيانات
4. هو منظم
5. من قبل الإنسان مقروءة، وبالتالي الطاعة بسهولة

حقيقة أنك تقول أنك تكرهها الاضطراب إلى مشطها فقط للحصول على قيمة توحي لي أنه يجب أن تستخدم واحدة من العديد من محلل XML هناك. ثق بي إنه سهل ويعمل

الناس يستخدمونها لأسباب جيدة. نعم، هل لديك سلبيات، أي Vibosity وما إلى ذلك، لكن صدقني بالمزايا البعيدة عيوب!

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