Десериализация объекта - PullRequest
0 голосов
/ 13 ноября 2011

для десериализации я использую метод работы:

public static bool InvokeDeserializeMethod<T>(ref T o, string serializedObject)
        {
            Type[] typesParameters = new Type[]{typeof(string)};
            MethodInfo methodInfo = typeof(o).GetMethod("Deserialize",typesParameters);
            object[] deserializeMethodParameters = new string [] {serializedObject};
            if (methodInfo != null)
            {
                try
                {
                    o = (T)methodInfo.Invoke(o, deserializeMethodParameters);
                    return true;
                }
                catch
                {
                    return false;
                }
            }
            return false;
        }

Сейчас я делаю функции копирования, вставки и мне нужно десериализовать некоторые сериализованные объекты (строки) Я не могу использовать этот метод, потому что я не хочу отправлять ссылку на какой-либо существующий объект, я новый объект, который будет создан Было бы лучше, если у меня есть такой метод:

public static T InvokeDeserializeMethod<T>(string serializedObject)

Есть ли способ, как этого добиться, вернуть объект типа T, не имея существующего объекта, который я бы отправил методу? (Каждый объект, который я буду использовать с этим методом, содержит метод сериализации и десериализации) Спасибо!

1 Ответ

1 голос
/ 13 ноября 2011

Вы можете использовать одну из перегрузок метода Activator.CreateInstance для создания экземпляра известного типа, если вы знаете его аргументы конструктора, или FormatterServices.GetUninitializedObject (Type t) если вы не хотите вызывать конструктор типов при десериализации.

...