Дизайн: C # текстовый парсер - PullRequest
0 голосов
/ 12 июля 2011

Я нахожусь в процессе создания простого синтаксического анализатора Yaml для своего проекта, и я действительно хочу узнать о наилучшем способе проектирования способа считывания данных в объекты и наоборот.

Прежде всего, я не хочу использовать отражение для сериализации / десериализации, потому что оно медленное и недостаточно настраиваемое для моих нужд.

В настоящее время я использую простой класс для хранения всех общих данных для синтаксического анализатора / записи:

public class YamlObject
{
    public string Name { get; set; }
    public string Value { get; set; }
    public List<YamlObject> SubObjects { get; set; }
}

Но это не очень быстро, потому что после получения всех объектов YamlOb я должен снова проанализировать их, чтобы сохранить их в определенных объектах. Необходимость циклически проходить по списку, чтобы найти список с подходящим именем, также довольно медленная.

EDIT: Пример Yaml:

terrain:
  - prefab: Lava1
  - position: 0,0,2000
    prefab: Lava1_Rocks1

Мои объекты:

public class Terrain
{
    public Vector3 Position { get; set; }
    public Vector3 Rotation { get; set; }
    public string Prefab { get; set; }
}
public class Mission
{
    public Terrain[] TerrainData { get; set; }
}

Теперь я думал об использовании интерфейса для вызова конкретного объекта при разборе, но пока не уверен, как именно это сделать.

Есть еще идеи или советы? :)

1 Ответ

0 голосов
/ 06 октября 2011

Еще раз, почему вы не используете существующую библиотеку, например Yaml, для .net?

для более: http://yaml -net-parser.sourceforge.net /

...