Отражение литья - PullRequest
       2

Отражение литья

0 голосов
/ 04 мая 2018

У меня есть объект с некоторыми полями, и я использую отражение, чтобы перебрать поля этого объекта. Этот объект получает сериализацию и десериализацию. Я сейчас пишу процедуру десериализации. Я хочу перебрать поля, получить значение из десериализации SerializationInfo. Прежде чем я начал реализовывать Reflection, я делал все вручную:

public SKA_MAP(SerializationInfo info, StreamingContext ctxt)
{
    //Get the values from info and assign them to the appropriate properties
    DISP_SEGS = (int)info.GetValue("DISP_SEGS", typeof(int)); 
    //other fields followed
}

и сейчас:

public SKA_MAP(SerializationInfo info, StreamingContext ctxt)
{
    //Get the values from info and assign them to the appropriate properties
    //DISP_SEGS = (int)info.GetValue("DISP_SEGS", typeof(int));

    foreach (FieldInfo FI in this.GetType().GetFields())
    {
        FI.SetValue(this, info.GetValue(FI.Name, FI.GetType()));
    }
}

Я получаю

'Неправильное приведение из' System.Int32 'к' System.Reflection.RtFieldInfo '.'

ОК, да, но я положил туда разные приведения "не показано" и ничего.

1 Ответ

0 голосов
/ 08 мая 2018

Попробуйте

FI.SetValue(this, info.GetValue(this));

См. Документацию для GetValue и SetValue

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...