Qual é a melhor maneira de mesclar dois objetos durante o tempo de execução usando C #?

Eu tenho dois objetos e quero mesclá-los:

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; }
}

Para criar:

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; }
}

Eu só conhecerei a estrutura do Foo em tempo de execução. Bar pode ser de qualquer tipo em tempo de execução. Eu gostaria de ter um método que será dado um tipo e combinar esse tipo com Foo. Por exemplo, no cenário acima, o método recebeu um tipo Bar em tempo de execução e eu o combinei com Foo.

Qual seria a melhor forma de fazer isso? Pode ser feito usando expressões LINQ ou eu tenho que gerá-lo dinamicamente ou há outra maneira? Ainda estou aprendendo o novo namespace LINQ no C # 3.0, portanto, desculpe a ignorância se isso não puder ser feito usando expressões LINQ. Esta é também a primeira vez que eu tive que fazer algo dinâmico como este com C #, então eu não tenho certeza de todas as opções que tenho disponíveis para mim.

Obrigado por qualquer opção dada.

EDITAR

Isto é estritamente para adicionar meta-informação ao tipo dado a mim para serialização. Esse cenário mantém os objetos do usuário ignorando as informações meta que precisam ser adicionadas, antes de serem serializadas. Eu tenho duas opções antes de fazer esta pergunta e eu só queria ver se havia mais, antes de decidir qual delas usar.

As duas opções que eu tenho são:

Manipulando a sequência serializada do tipo que me foi dada após a serialização, adicionando as meta informações.

Envolvendo o tipo que me foi dado, o que é similar ao que o @Zxpro mencionou, mas o meu diferiu um pouco, o que é bom. Isso fará com que o usuário da minha API tenha que seguir a convenção, o que não é uma coisa ruim, já que todo mundo é sobre a convenção sobre a configuração:

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

EDITAR

Obrigado a todos por suas respostas. Eu decidi envolver o objeto acima e dei a resposta para @Zxpro, já que a maioria também gostou dessa abordagem.

Se alguém mais se deparar com essa questão, sinta-se à vontade para postar, se você acha que pode haver uma maneira melhor.

questionAnswers(7)

yourAnswerToTheQuestion