Здравствуйте, Didi, Вы писали:
D>т.е. нужна сериализация в зависимости от типа своя. Или вариант строить такие конструкции с динамическим определением типа?
Текущий вариант будет работать. Если типов много и писать однотипный код не хочется, можно поискать приключений с dynamic.
Почему приключений? А попробуйте угадать вывод вот тут:
private class A<T>
{
private T value;
public A(T t)
{
value = t;
}
// каждый тип нужно сериализовать по своему
public String MyToString()
{
return (string)Serialise((dynamic)value);
}
private string Serialise(string value)
{
return "string";
}
private string Serialise(DateTime value)
{
return "DateTime";
}
private string Serialise(int value)
{
return "int";
}
private string Serialise(object value)
{
return "obj";
}
}
private static void Main()
{
try
{
Console.WriteLine(new A<int>(23).MyToString());
Console.WriteLine(new A<byte>(23).MyToString());
Console.WriteLine(new A<byte?>(23).MyToString());
Console.WriteLine(new A<long>(23).MyToString());
Console.WriteLine(new A<int[]>(new[] { 0 }).MyToString());
Console.WriteLine(new A<string>(null).MyToString());
Console.WriteLine(new A<Stream>(null).MyToString());
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.WriteLine("Done.");
Console.ReadKey();
}
Не подходит — или ждать паттерн-матчинга в c#7, или сделать аналог dynamic, только с более строгим биндингом — словарь <Type,Func<object, string>>, пишется за 5 минут.
P.S. А готовые библиотеки сериализации чем не подходят?