Хранить данные в исходных файлах C# против XML и т. Д. ...?

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

Вопрос

Это вопрос C#.

Я просто бродил, если кто -нибудь попытался хранить свои данные (например, файлы конфигурации), в файле *.cs вместо XML?

Я действительно ненавижу XML. Вся идея анализа HTML-подобной структуры каждый раз, когда вам нужны некоторые данные, кажется глупой.

Есть ли легкие альтернативы (например, YAML) XML? В моем случае мне действительно нужно сохранить некоторые данные для (игры) уровня, где есть много разных объектов, типов местности и т. Д. В плоском файле, так что я могу прочитать его позже.

Я думаю, я мог бы сериализовать свой Уровень Класс, но я хочу, чтобы файл данных был редактируемым в любом текстовом редакторе, например.

Любая помощь будет приветствоваться, спасибо!

PS: Что касается файлов .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 -файлы:

Мир Warcraft
Кризис
Команда и завоевание 3

Вся идея анализа HTML-подобной структуры каждый раз, когда вам нужны некоторые данные, кажется глупой.

Если вы не собираетесь использовать XML или YAML, вам придется написать свой собственный анализатор и валидатор, и теперь вы вошли в землю, где глупые правят. XML раздражает, как все, что выходит, но обойтись без экосистемы инструментов для манипулирования им, хуже.

Нам нравится JSON для файлов конфигурации - это удивительно универсально.

Легко разобраться, легко разобрать и генерировать (включая сильные библиотеки для .NET - как MS, так и сторонняя сторона), и очень мощный - своего рода XML с хорошими основными датами данных.

Донно, если вы слышали об этом раньше, но вы должны проверить эту вещь YAML. Это совершенно круто, с its own homepage и все.

Если ваши данные не слишком сложные или иерархические, вы можете сохранить их в формате файла свойств, подобного этому:

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

и т.п.

С другой стороны, XML действительно легко работать в C# с сериализацией (Iserializable или DataContract), вам не нужно писать код анализа, фреймворк делает все для вас. Редактирование XML в текстовом редакторе не может быть таким плохим!

Если вы готовы немного пойти на компромисс на XML, вы можете использовать NamevalueCollection Чтобы удержать элементы конфигурации. Затем вы можете сериализовать это с помощью встроенной сериализации .NET. Файл будет XML, но он будет в действительно простом, простого в редакции, и вам не придется беспокоиться о каких-либо конверсиях/проверке ручного типа.

XML даже думал, что довольно тяжелый часто является лучшим выбором для хранения данных в файле, а LINQ для XML делает чтение и написание этих данных намного проще.

Еще один вариант, если ваши данные становятся довольно сложными,-это использовать что-то вроде SQLite, я использовал это до и для однопользовательского доступа, это действительно довольно быстро и простой в использовании.

Похоже, вам нужен двоичный формат, который можно отредактировать в текстовом редакторе. К сожалению (до тех пор, пока все не будут свободно свободно с редактором HEX), существует неизбежный компромисс между скоростью и простотой редактирования.

Поскольку двоичный формат - это в основном очень плотная упаковка из самых маленьких наборов байтов, которые кодируют ваше состояние, его было бы быстро и легко проанализировать. Формат XML, с другой стороны, будет легко редактировать. Одно из возможных решений заключается в том, что вы создаете оба и создаете простую программу, которая преобразуется между ними. Затем ваши энергетические пользователи будут использовать эту программу для преобразования ваших уровней в XML, отредактировать их, а затем конвертировать их обратно.

Если вы в конечном итоге используете XML в этом сценарии, я бы порекомендовал вам использовать более одного файла, возможно, одного на объект. Похоже, вы планируете иметь сложный мир. Имеет смысл немного нарезать его.

Если вы используете систему конфигурации .NET, она выполняет анализ XML для вас. Видеть Как: Создать пользовательские разделы конфигурации с использованием конфигурации. Анкет Несмотря на то, что это в разделе ASP.NET, это применимо ко всем коду .NET.

Технически вам не нужно проанализировать XML, просто создайте модель данных, а затем сериализуйте и десериализуйте от XML. Также очень просто построить редактор в Visual Studio для модели данных, имея Treeview или ListView, отображающий каждый элемент/объект в модели данных, и используйте ProperationEditor для редактирования свойств выбранного объекта. Используйте OpenFileDialog и SaveFileDialog, чтобы позволить пользователю выбрать файл XML и XMLSerializer для загрузки и сохранения модели данных UR. Действительно безболезненный, я уверяю тебя! :-)

Я работаю в игровой индустрии, и мы используем XML в значительной степени исключительно для того, чтобы делать то, что вы описываете.
Вот почему:
1. Это хорошо понятно и является стандартом
2. Он имеет отличную поддержку с точки зрения библиотек
3. Это может быть подтверждено - это важно при создании редакторов данных
4. Он структурирован
5. Это человеческое читаемое и, следовательно, легко отзывается

Тот факт, что вы говорите, что ненавидите необходимость трал, чтобы получить ценность для меня, что вы должны использовать один из многих анализаторов XML. Поверь мне, это легко и работает

Люди используют это по уважительным причинам. Да, это есть недостатки, т. Е. Слово, но, поверьте мне, преимущества далеко за пределами недостатков!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top