Это будет зависеть в очень много на то, что формат плоского файла, и как работает схема - это самоописываемый, например? Тем не менее, это звучит для меня как . Большинство работ здесь будут понимать формат плоского файла (и привязку схемы). Оттуда выбор «десериализации в статический тип» и «десериализация в динамический тип» является довольно спорным, и я бы сказал, что очень мало десериализации точки в динамическом типе просто для того, чтобы отобразить все это на статическую тип. Кроме того, статический тип может (опять же, в зависимости от специфики формата файла) - удобное место для украшения типов, чтобы сказать «вот как это интерпретировать», если требуется формат файла. Например (и я полностью выдумываю, как я иду вдоль - не ожидаем, что это относится к вашему формату):
[Frobber(Offset = 4, Format = DataFormat.LittleEndianInt32)]
public int Id {get;set;}
[Frobber(Offset = 0, Format = DataFormat.LittleEndianInt32)]
public int Index {get;set;}
[Frobber(Offset = 8, Format = DataFormat.FixedAscii, Size = 20)]
public string Name {get;set;}
[Frobber(Offset = 28, Format = DataFormat.Blob)] // implicit Size=16 as Guid
public Guid UniqueKey {get;set;}
где FrobberAttribute
только то, что вы могли бы придумать, чтобы указать формат файла. Конечно, если схема определена внутри файла, это может быть необязательно.
Re reflection: основное отражение будет работать нормально, если данные достаточно легкие; но в целом отражение может быть довольно дорогостоящим. Если вам нужно, чтобы он был оптимальным, вы, вероятно, захотите, чтобы реализация рассмотрела стратегическое кэширование (т. Е. Только одно действие на открытие) и мета-программирование (превращение стратегии в готовый ИЛ, а не накладные расходы отражение во время выполнения).
Если формат файла является общим/популярным, вы можете обнаружить, что существуют существующие инструменты для чтения этого формата. Если нет, вы можете либо бросить свой собственный, либо найти сумасшедшего человека, которому нравится писать инструменты для сериализации и метапрограммирования. Такие люди действительно существуют ...
Я был немного неясен в моем вопросе, вопрос более ориентирован на создание объекта, когда у меня есть информация о сопоставлении. Контракт установлен, поэтому мне не нужно отмечать свойства с помощью настраиваемых атрибутов. Когда вы говорите, что IL готовый испеченный IL, вы имеете в виду сопутствующие в строках http://www.codeproject.com/Articles/14560/Fast-Dynamic-Property-Field-Accessors – Anders
@ Аnders хорошо, может быть, не что-то * совершенно * , но да, то, что позволяет слишком часто вызывать 'SetValue' в' FieldInfo'/'PropertyInfo'. Но: если вы делаете это только иногда, даже это не боль. –
Его около 1000 записей в результате, каждая запись имеет 10-30 столбцов, поэтому должно быть установлено не более 30 000 свойств + 1000 CreateInstance. У вас есть блог или статья о выпечке IL? его не то, что я использовал, спасибо. – Anders