Если вы хотите написать собственный код сериализации по любой причине, вы будете использовать рефлексию.
Что вы делаете, так это пишете рекурсивный метод сериализации типа.Затем вы применяете это так, как считаете нужным, чтобы получить результат.
var type = myObjectOfSomeType.GetType();
// now depending on what you want to store
// I'll save all public properties
var properties = type.GetProperties(); // get all public properties
foreach(var p in properties)
{
var value = p.GetValue(myObjectOfSomeType, null);
Writevalue(p.Name, value);
}
Реализация WriteValue
должна распознавать встроенные типы и обрабатывать их соответственно, это типичные вещи, такие как string, char, integer,double, DateTime и т. д.
- Если он встречает последовательность или коллекцию, вам нужно выписать много значений.
- Если встречается нетривиальный тип, вы снова примените этот рекурсивный шаблон.
Конечным результатом является рекурсивный алгоритм, который обходит вашу объектную модель и записывает значения при обнаружении типов, которые я знаю, как сериализовать.
Однако я рекомендую изучитьWCF, не для создания сервисов, а для сериализации.Он поставляется как часть платформы .NET 3.0 с новой сборкой System.Runtime.Serilization и в целом очень эффективен при работе с сериализацией и аннотациями данных.