Десериализация объекта

#c# #generics #object #deserialization

#c# #обобщения #объект #десериализация

Вопрос:

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

 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:

Вы можете использовать любой из активаторов.Метод CreateInstance перегружается для создания экземпляра известного типа, если вы знаете, что это аргументы конструктора или FormatterServices.Получите uninitializedobject(тип t), если вы не хотите вызывать конструктор типов при десериализации.