Я люблю простые костыли.
Когда требуется сериализовать некоторые поля в какой-то текстовый формат,
бывает удобно использовать промежуточное представление данных вида:
// Name/Value item
public class NVItem {
public string? Name;
public object? Value;
public IEnumerable? SubItems;
public NVItem(string? name, object? value) {
Name = name;
if (value==null) return;
SubItems = value as IEnumerable;
if (SubItems != null) return;
// Упс!
Value = value as string;
if (Value != null) return;
var num = value as IEnumerable;
if (num==null) {
Value = value;
} else {
SubItems = num.Cast<object>().Select(t => new NVItem(null, t));
}
}
}