Here is an answer using a macro extension. Because you need to run two separate regex's (although the second regex is very simple). First a demo with your original text first, some badly formatted text second and your desired results last:

Select your text first and then trigger the macro. I am using alt+r as the keybinding but you can choose whatever you want.
Using the macro extension multi-command put this into your settings.json:
"multiCommand.commands": [
{
"command": "multiCommand.insertAlignRows",
"sequence": [
"editor.action.insertCursorAtEndOfEachLineSelected",
"cursorHomeSelect",
{
"command": "editor.action.insertSnippet",
"args": {
"snippet": "${TM_SELECTED_TEXT/^(\\s*)\\[\\s*(.{12})\\s*(.{18})\\s*([^\\]]*)\\],?/$1{ Name = $2 Ref = $3Description = Some $4}/g}",
}
},
"cursorHomeSelect",
{
"command": "editor.action.insertSnippet",
"args": {
"snippet": "${TM_SELECTED_TEXT/,/;/g}",
}
},
]
}
]
In keybindings.json:
{
"key": "alt+r", // choose whatever keybinding you want
"command": "extension.multiCommand.execute",
"args": { "command": "multiCommand.insertAlignRows" },
"when": "editorTextFocus"
},
The regex that is doing almost all of the work is:
^(\s*)\[\s*(.{12})\s*(.{18})\s*([^\]]*)\],?
I removed the double escapes necessary in snippets but not in the find/replace widget so you could just use this regex in your find input (and not do the macro at all) and
$1{ Name = $2 Ref = $3Description = Some $4}
in the replace field. And then just replace , with ; after that.
Back to that regex: ^(\s*)\[\s*(.{12})\s*(.{18})\s*([^\]]*)\],? which looks brittle because of the "magic numbers" 12 and 18 derived from your sample text. But it isn't as bad as it first seems as the demo with the bad original formatting shows. They are just counting characters and as long as your input is reasonably close to what you presented it'll work.
The 12 can actually be from 12-16, with the 12 being the length of your longest first item (like "sortOrder",) and the 16 being the minimum number from the beginning of the first items to where the second items (like "String") begin.
Likewise the 18 could be 17-24 given your input and where you want the final column to start. Play with the numbers, it is pretty easy in regex101 demo.
I think the only restriction is that your input not look like this:
[ "names", "Array<String>", "array of strings represents name" ]
[ "sortOrder","String", "sort order includes ascend and descend" ],
where a later column starts before the end of the previous column - as in column 3 starts before all the column 2's end. Likewise for some column 2 item starting before all the column 1 items have ended like
[ "sortOrder", "String", "sort order includes ascend and descend" ],
[ "names", "Array<String>", "array of strings represents name" ]
If your input is that bad you could fix it first with some simple regex's.
Remember you can also adjust where the columns start in your replace by adding/subtracting spaces, as between the $2 Ref in my example above or $3Description - you can add space(s) after the $3 if you wish.