Как генерировать Json на C#, если структура динамическая, не прописывая все возможные варианты?
Можно оформить классы вот так:public class CommandResult
{
    public string Command {get;set;}
}
public class CommandResult<T>:CommandResult
{
    public T Data {get;set;}
}
public class FilesList
{
    public string[] Files {get;set;}
}
public class UserInfo
{
    ...
}
и используешь в WebApipublic class MyAwesomeController:ApiController
{

    public CommandResult<FilesList> GetFilesList(){
        ...
        return new CommandResult<FilesList> (){
            Command = "FilesList",
            Data = new FilesList(){Files = new []{"file1","file2","file3","file4"}}
        };
    }
 public CommandResult<UserInfo> GetUserInfo(){
...
 }
}
или со своей логикойpublic class MyAwesomeCommands
{

    private CommandResult<FilesList> _getFilesList(){
    ...
        return new CommandResult<FilesList> (){
            Command = "FilesList",
            Data = new FilesList(){Files = new []{"file1","file2","file3","file4"}}
        };
    }
    public string GetFilesList(){
        var data = getFilesList();
        return JsonConvert.SerializeObject(data);
    }
 public string GetUserInfo(){
...
 }
}
Я не знаю как это сделать с помощью SerializeObject, отказался от него из-за плохого быстродействия и низкой гибкости, но никто вам не мешает используя рефлексию написать самому конструкцию, которая укажет парсеру тот класс, чье имя содержится в string