Convert JSON into C# anonymous type

Converts JSON into C# dynamic anonymous types

by aliashrafx

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/json5/0.5.1/json5.min.js"></script>
<div style="font-size: 25px; font-weight: 400; font-family: sans-serif">

  <p>
    Your JSON:
  </p>
  <div>
    <textarea id='sourceTextArea' style="width: 500px; height: 200px">
{
  "hello": "world",
  "howdy": "pardner",
  "super": [
    "massive",
    null,
    "black hole",
  ],
  "iowa": 10110,
}
    </textarea>
  </div>
  <div>
    <button onclick='convert()'>Convert</button>
  </div>

  <p>
    C# 6 Code:
  </p>
  <div>
    <textarea id='destinationTextArea' style="width: 500px; height: 200px"></textarea>
  </div>

</div>

JavaScript

function convert() {
  var data = JSON5.parse(sourceTextArea.value);
  
  var converted = convertToDotNet(data, 0);
  
  destinationTextArea.value = converted;
}

function convertToDotNet(data, indent) {
	
  var result = "";
  
  if(data === null) {
  
  	result = indentText("null", indent);
    
  } else if (data instanceof Array) {
  	
    result += indentText("new object[] {", indent) + "\r\n";
    for(var i = 0; i < data.length; i++) {
    	result += indentText(convertToDotNet(data[i], indent), indent+1) + ",\r\n";
    }
    result += indentText("}", indent) + "\r\n";
    
  } else if (typeof data === 'object') {
  	
    result += indentText("new Dictionary<string, object> {", indent) + "\r\n";
    for(var key in data) {
    	result += indentText("[" + JSON.stringify(key) + "] = " + convertToDotNet(data[key], indent), indent + 1) + ",\r\n";
    }
    result += indentText("}", indent) + "\r\n";
    
  } else {
  	result = indentText(JSON.stringify(data), indent);
  }
  
  return result;
}

function indentText(text, indent) {
	var prefix = ("\t").repeat(indent);
  var lines = text.match(/[^\r\n]+/g);
  
  var result = "";
  for(var i = 0; i < lines.length; i++) {
  	result += prefix + lines[i];
    if(i < lines.length - 1) {
    	result += "\r\n";
    }
  }
  
  return result;
}