Каков наилучший способ объединения двух объектов во время выполнения с использованием C #?

У меня есть два объекта, и я хочу объединить их:

public class Foo
{
    public string Name { get; set; }
}

public class Bar
{
    public Guid Id { get; set; }
    public string Property1 { get; set; }
    public string Property2 { get; set; }
    public string Property3 { get; set; }
    public string Property4 { get; set; }
}

Создавать:

public class FooBar
{
    public string Name { get; set; }
    public Guid Id { get; set; }
    public string Property1 { get; set; }
    public string Property2 { get; set; }
    public string Property3 { get; set; }
    public string Property4 { get; set; }
}

Я буду знать структуру Foo только во время выполнения. Бар может быть любого типа во время выполнения. Я хотел бы иметь метод, который будет задан тип, и он объединяет этот тип с Foo. Например, в приведенном выше сценарии метод получил тип Bar во время выполнения, и я объединил его с Foo.

Каков был бы лучший способ сделать это? Это можно сделать с помощью выражений LINQ или мне нужно генерировать его динамически или есть другой способ? Я все еще изучаю новое пространство имен LINQ в C # 3.0, поэтому извините за невежество, если это возможно 'это может быть сделано с помощью выражений LINQ. Это также первый раз, когда мне приходилось делать что-то динамическое с C #, поэтому я не совсем уверен во всех доступных мне опциях.

Спасибо за любые варианты.

РЕДАКТИРОВАТЬ

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

Я выбрал два варианта:

Манипулирование сериализованной строкой типа, данного мне после сериализации, путем добавления метаинформации.

Оборачивая данный мне тип, который похож на то, что упоминал @Zxpro, но мой немного отличался, что нормально. Это просто заставит пользователя моего API следовать соглашению, которое неЭто плохо, так как все о соглашении по конфигурации:

public class Foo
{
    public string Name { get; set; }
    public T Content { get; set; }
}

РЕДАКТИРОВАТЬ

Спасибо всем за ответы. Я решил обернуть объект, как указано выше, и дал ответ @Zxpro, так как большинству тоже понравился этот подход.

Если кто-то еще сталкивается с этим вопросом, не стесняйтесь писать, если вы думаете, что может быть лучший способ.

Ответы на вопрос(7)

Ваш ответ на вопрос