using YamlDotNet.Serialization;
using YamlDotNet.RepresentationModel;
using Newtonsoft.Json.Linq;
using Newtonsoft.Json.Converters;
public static void Main()
string attachmentName = "christina";
string fileAsBase64Test =
"LS0tCi0gcHJlZml4OiAiIgogIG1hY3JvX2ZpbGU6ICJwYWNrYWdlOi8vZm9yZ2VfZ2VuZXJpY19hdHRhY2htZW50X2Rlc2NyaXB0aW9ucy91cmRmL2NvbXBvbmVudHMvYXcyX2NlbGwueGFjcm8iCiAgb3JpZ2luOiAmZGVmYXVsdF96ZXJvX29yaWdpbgogICAgcG9zaXRpb246CiAgICAgIHg6IDAKICAgICAgeTogMAogICAgICB6OiAwCiAgICByb3RhdGlvbjoKICAgICAgcjogIWRlZ3JlZXMgMAogICAgICBwOiAhZGVncmVlcyAwCiAgICAgIHk6ICFkZWdyZWVzIDAKICBjYWxpYnJhdGVkX29yaWdpbl9maWxlOiBudWxsCiAgY29tcG9uZW50X3NwZWNpZmljX2NvbmZpZzogbnVsbAoKICBhdHRhY2hlZF9jb21wb25lbnRzOgogICAgLSBwcmVmaXg6ICJhcm1fIgogICAgICBhdHRhY2htZW50X2xpbms6IGZsYW5nZQogICAgICBtYWNyb19maWxlOiAicGFja2FnZTovL2ZvcmdlX2dlbmVyaWNfcm9ib3RfZGVzY3JpcHRpb25zL3VyZGYvcm9ib3RzL21vdG9tYW4vYXIyMDEwLnhhY3JvIgogICAgICBvcmlnaW46CiAgICAgICAgcG9zaXRpb246CiAgICAgICAgICB4OiAwLjUwOAogICAgICAgICAgeTogMC40NTU3Mzk1CiAgICAgICAgICB6OiAwLjM0MjkKICAgICAgICByb3RhdGlvbjoKICAgICAgICAgIHI6ICFkZWdyZWVzIDAKICAgICAgICAgIHA6ICFkZWdyZWVzIDAKICAgICAgICAgIHk6ICFkZWdyZWVzIC05MAogICAgICBjYWxpYnJhdGVkX29yaWdpbl9maWxlOiBudWxsCiAgICAgIGNvbXBvbmVudF9zcGVjaWZpY19jb25maWc6CiAgICAgICAga2luZW1hdGljX29mZnNldF9maWxlOiAiL3Zhci9sb2NhbC9mb3JnZS9jYWxpYnJhdGlvbi93ZWxkZXJfYXJtX2NhbGlicmF0aW9uLnlhbWwiCiAgICAgIGF0dGFjaGVkX2NvbXBvbmVudHM6CiAgICAgICAgLSBhdHRhY2htZW50X2xpbms6IGxpbmtfM191CiAgICAgICAgICBwcmVmaXg6ICJ3aXJlX2ZlZWRlcl8iCiAgICAgICAgICBtYWNyb19maWxlOiAicGFja2FnZTovL2ZvcmdlX2dlbmVyaWNfYXR0YWNobWVudF9kZXNjcmlwdGlvbnMvdXJkZi90b29scy93aXJlX2ZlZWRlci54YWNybyIKICAgICAgICAgIG9yaWdpbjoKICAgICAgICAgICAgcG9zaXRpb246CiAgICAgICAgICAgICAgeDogMC4xCiAgICAgICAgICAgICAgeTogMC4yCiAgICAgICAgICAgICAgejogMAogICAgICAgICAgICByb3RhdGlvbjoKICAgICAgICAgICAgICByOiAhZGVncmVlcyAwCiAgICAgICAgICAgICAgcDogIWRlZ3JlZXMgMAogICAgICAgICAgICAgIHk6ICFkZWdyZWVzIDAKICAgICAgICAgIGNhbGlicmF0ZWRfb3JpZ2luX2ZpbGU6IG51bGwKICAgICAgICAgIGNvbXBvbmVudF9zcGVjaWZpY19jb25maWc6IG51bGwKICAgICAgICAgIGNhbGlicmF0aW9uX2ZpbGU6IG51bGwKICAgICAgICAgIGF0dGFjaGVkX2NvbXBvbmVudHM6IFsgXQogICAgICAgIC0gYXR0YWNobWVudF9saW5rOiBsaW5rXzNfdQogICAgICAgICAgcHJlZml4OiAibXVycnBsYXN0aWtfY2FibGVfIgogICAgICAgICAgbWFjcm9fZmlsZTogInBhY2thZ2U6Ly9mb3JnZV9nZW5lcmljX2F0dGFjaG1lbnRfZGVzY3JpcHRpb25zL3VyZGYvdG9vbHMvbXVycnBsYXN0aWtfYm94LnhhY3JvIgogICAgICAgICAgb3JpZ2luOgogICAgICAgICAgICBwb3NpdGlvbjoKICAgICAgICAgICAgICB4OiAwLjMyNQogICAgICAgICAgICAgIHk6IC0wLjE4CiAgICAgICAgICAgICAgejogMAogICAgICAgICAgICByb3RhdGlvbjoKICAgICAgICAgICAgICByOiAhZGVncmVlcyAwCiAgICAgICAgICAgICAgcDogIWRlZ3JlZXMgMAogICAgICAgICAgICAgIHk6ICFkZWdyZWVzIDAKICAgICAgICAgIGNhbGlicmF0ZWRfb3JpZ2luX2ZpbGU6IG51bGwKICAgICAgICAgIGNvbXBvbmVudF9zcGVjaWZpY19jb25maWc6IG51bGwKICAgICAgICAgIGNhbGlicmF0aW9uX2ZpbGU6IG51bGwKICAgICAgICAgIGF0dGFjaGVkX2NvbXBvbmVudHM6IFsgXQogICAgICAgIC0gYXR0YWNobWVudF9saW5rOiBmbGFuZ2UKICAgICAgICAgIHByZWZpeDogInJ0Zl8iCiAgICAgICAgICBtYWNyb19maWxlOiAicGFja2FnZTovL2ZvcmdlX2dlbmVyaWNfYXR0YWNobWVudF9kZXNjcmlwdGlvbnMvdXJkZi90b29scy9ydGYvcnRmX3YyLTEueGFjcm8iCiAgICAgICAgICBvcmlnaW46ICpkZWZhdWx0X3plcm9fb3JpZ2luCiAgICAgICAgICBjYWxpYnJhdGVkX29yaWdpbl9maWxlOiBudWxsCiAgICAgICAgICBjb21wb25lbnRfc3BlY2lmaWNfY29uZmlnOgogICAgICAgICAgICBjYWxpYnJhdGlvbl9maWxlOiAiL3Zhci9sb2NhbC9mb3JnZS9jYWxpYnJhdGlvbi9ydGZfY2FsaWJyYXRpb24ueWFtbCIKICAgICAgICAgIGF0dGFjaGVkX2NvbXBvbmVudHM6CiAgICAgICAgICAgIC0gYXR0YWNobWVudF9saW5rOiBmbGFuZ2UKICAgICAgICAgICAgICBwcmVmaXg6ICJ0b3JjaF8iCiAgICAgICAgICAgICAgbWFjcm9fZmlsZTogInBhY2thZ2U6Ly9mb3JnZV9nZW5lcmljX2F0dGFjaG1lbnRfZGVzY3JpcHRpb25zL3VyZGYvdG9vbHMvdG9yY2hlcy9tb3VudHMvYWlyY2F0X2FiaXJvYl93LnhhY3JvIgogICAgICAgICAgICAgIG9yaWdpbjogbnVsbAogICAgICAgICAgICAgIGNhbGlicmF0ZWRfb3JpZ2luX2ZpbGU6ICIvdmFyL2xvY2FsL2ZvcmdlL2NhbGlicmF0aW9uL3RjcF9jYWxpYnJhdGlvbi55YW1sIgogICAgICAgICAgICAgICMgTm8gc3BlY2lmaWMgY29uZmlndXJhdGlvbiB2YWx1ZXMuCiAgICAgICAgICAgICAgY29tcG9uZW50X3NwZWNpZmljX2NvbmZpZzogbnVsbAoKICAgICAgICAgICAgICBhdHRhY2hlZF9jb21wb25lbnRzOgogICAgICAgICAgICAgICAgLSBhdHRhY2htZW50X2xpbms6IGZsYW5nZQogICAgICAgICAgICAgICAgICBwcmVmaXg6ICJuZWNrXyIKICAgICAgICAgICAgICAgICAgbWFjcm9fZmlsZTogInBhY2thZ2U6Ly9mb3JnZV9nZW5lcmljX2F0dGFjaG1lbnRfZGVzY3JpcHRpb25zL3VyZGYvdG9vbHMvdG9yY2hlcy9uZWNrcy9hYmlyb2JfdzUwMF80NUQueGFjcm8iCiAgICAgICAgICAgICAgICAgIG9yaWdpbjogKmRlZmF1bHRfemVyb19vcmlnaW4KICAgICAgICAgICAgICAgICAgY2FsaWJyYXRlZF9vcmlnaW5fZmlsZTogbnVsbAogICAgICAgICAgICAgICAgICBjb21wb25lbnRfc3BlY2lmaWNfY29uZmlnOiBudWxsCiAgICAgICAgICAgICAgICAgIGF0dGFjaGVkX2NvbXBvbmVudHM6CiAgICAgICAgICAgICAgICAgICAgLSBhdHRhY2htZW50X2xpbms6IGZsYW5nZQogICAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAibm96emxlXyIKICAgICAgICAgICAgICAgICAgICAgIG1hY3JvX2ZpbGU6ICJwYWNrYWdlOi8vZm9yZ2VfZ2VuZXJpY19hdHRhY2htZW50X2Rlc2NyaXB0aW9ucy91cmRmL3Rvb2xzL3RvcmNoZXMvbm96emxlcy9hYmljb3Jfbm96emxlXzE0NS0wNTQ0LnhhY3JvIgogICAgICAgICAgICAgICAgICAgICAgb3JpZ2luOiAqZGVmYXVsdF96ZXJvX29yaWdpbgogICAgICAgICAgICAgICAgICAgICAgY2FsaWJyYXRlZF9vcmlnaW5fZmlsZTogbnVsbAogICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50X3NwZWNpZmljX2NvbmZpZzogbnVsbAoKICAgIC0gcHJlZml4OiAiY2FycmlhZ2VfIgogICAgICBhdHRhY2htZW50X2xpbms6IGZsYW5nZQogICAgICBtYWNyb19maWxlOiAicGFja2FnZTovL2ZvcmdlX2dlbmVyaWNfcm9ib3RfZGVzY3JpcHRpb25zL3VyZGYvcm9ib3RzL2dlbmVyYWwvYmFzaWNfY2FycmlhZ2UueGFjcm8iCiAgICAgIG9yaWdpbjoKICAgICAgICBwb3NpdGlvbjoKICAgICAgICAgIHg6IDAKICAgICAgICAgIHk6IC0wLjk1MjM3MwogICAgICAgICAgejogMAogICAgICAgIHJvdGF0aW9uOgogICAgICAgICAgcjogMAogICAgICAgICAgcDogMAogICAgICAgICAgeTogMAogICAgICBjYWxpYnJhdGVkX29yaWdpbl9maWxlOiBudWxsCiAgICAgIGNvbXBvbmVudF9zcGVjaWZpY19jb25maWc6CiAgICAgICAgIyBGaWxlIHRoYXQgc3BlY2lmaWVzIHRoZSBheGlzIGNhbGlicmF0aW9uIG9mIHRoaXMgcGxhdGZvcm0uCiAgICAgICAgYXhpc19jYWxpYnJhdGlvbl9maWxlOiAicGFja2FnZTovL2ZvcmdlX2dlbmVyaWNfcm9ib3RfZGVzY3JpcHRpb25zL3RlbXBsYXRlX2NvbmZpZ3MvZ2VuZXJhbC9iYXNpY19tb2JpbGVfcGxhdGZvcm0vY2FycmlhZ2VfY2FsaWJyYXRpb24ueWFtbCIKICAgICAgYXR0YWNoZWRfY29tcG9uZW50czoKICAgICAgICAtIGF0dGFjaG1lbnRfbGluazogZmxhbmdlCiAgICAgICAgICBwcmVmaXg6ICJwb3NpdGlvbmVyXyIKICAgICAgICAgIG1hY3JvX2ZpbGU6ICJwYWNrYWdlOi8vZm9yZ2VfZ2VuZXJpY19yb2JvdF9kZXNjcmlwdGlvbnMvdXJkZi9yb2JvdHMvbW90b21hbi9tb3RvcG9zX2Q1MDAueGFjcm8iCiAgICAgICAgICBvcmlnaW46IG51bGwKICAgICAgICAgIGNhbGlicmF0ZWRfb3JpZ2luX2ZpbGU6ICIvdmFyL2xvY2FsL2ZvcmdlL2NhbGlicmF0aW9uL3Bvc2l0aW9uZXJfY2FsaWJyYXRpb24ueWFtbCIKICAgICAgICAgIGNvbXBvbmVudF9zcGVjaWZpY19jb25maWc6CiAgICAgICAgICAgIGtpbmVtYXRpY19vZmZzZXRfZmlsZTogIi92YXIvbG9jYWwvZm9yZ2UvY2FsaWJyYXRpb24vcG9zaXRpb25lcl9jYWxpYnJhdGlvbl9vZmZzZXRzLnlhbWwiCiAgICAgICAgICBhdHRhY2hlZF9jb21wb25lbnRzOgogICAgICAgICAgICAtIGF0dGFjaG1lbnRfbGluazogZmxhbmdlCiAgICAgICAgICAgICAgcHJlZml4OiAidGFibGV0b3BfIgogICAgICAgICAgICAgIG1hY3JvX2ZpbGU6ICJwYWNrYWdlOi8vZm9yZ2VfZ2VuZXJpY19hdHRhY2htZW50X2Rlc2NyaXB0aW9ucy91cmRmL3Rvb2xzL2Q1MDBfdGFibGV0b3Avc3BhY2Vycy54YWNybyIKICAgICAgICAgICAgICBvcmlnaW46ICpkZWZhdWx0X3plcm9fb3JpZ2luCiAgICAgICAgICAgICAgY2FsaWJyYXRlZF9vcmlnaW5fZmlsZTogbnVsbAogICAgICAgICAgICAgIGNvbXBvbmVudF9zcGVjaWZpY19jb25maWc6CiAgICAgICAgICAgICAgICBlbmFibGVfcG9zaXRpb25lcl9jZW50ZXJfaGFjazogdHJ1ZQoKICAgIC0gcHJlZml4OiAidGNzXyIKICAgICAgYXR0YWNobWVudF9saW5rOiBmbGFuZ2UKICAgICAgbWFjcm9fZmlsZTogInBhY2thZ2U6Ly9mb3JnZV9nZW5lcmljX2F0dGFjaG1lbnRfZGVzY3JpcHRpb25zL3VyZGYvY29tcG9uZW50cy90aXBfY2xlYW5pbmdfc3RhdGlvbi54YWNybyIKICAgICAgb3JpZ2luOiBudWxsCiAgICAgIGNhbGlicmF0ZWRfb3JpZ2luX2ZpbGU6ICIvdmFyL2xvY2FsL2ZvcmdlL2NhbGlicmF0aW9uL3Rjc19jYWxpYnJhdGlvbi55YW1sIgogICAgICBjb21wb25lbnRfc3BlY2lmaWNfY29uZmlnOgogICAgICAgIHVzZV9wZWRlc3RhbDogZmFsc2UKCiAgICAtIHByZWZpeDogInNsX2ZyYW1lXyIKICAgICAgYXR0YWNobWVudF9saW5rOiBmbGFuZ2UKICAgICAgbWFjcm9fZmlsZTogInBhY2thZ2U6Ly9mb3JnZV9nZW5lcmljX2F0dGFjaG1lbnRfZGVzY3JpcHRpb25zL3VyZGYvY29tcG9uZW50cy9zbF9mcmFtZS54YWNybyIKICAgICAgb3JpZ2luOgogICAgICAgIHBvc2l0aW9uOgogICAgICAgICAgeDogLTAuODEyOAogICAgICAgICAgeTogMC4zNTQxMzk1CiAgICAgICAgICB6OiAwLjA1MDgKICAgICAgICByb3RhdGlvbjoKICAgICAgICAgIHI6ICFkZWdyZWVzIDAKICAgICAgICAgIHA6ICFkZWdyZWVzIDAKICAgICAgICAgIHk6ICFkZWdyZWVzIDIwCiAgICAgIGNhbGlicmF0ZWRfb3JpZ2luX2ZpbGU6IG51bGwKICAgICAgY29tcG9uZW50X3NwZWNpZmljX2NvbmZpZzogbnVsbA==";
byte[] bytes = Convert.FromBase64String(fileAsBase64Test);
string yamlAsString = System.Text.Encoding.UTF8.GetString(bytes);
Deserializer deserializer = new DeserializerBuilder().WithTagMapping("!degrees", typeof(int)).Build();
var yamlAsObject = deserializer.Deserialize<object>(yamlAsString);
var js = new Newtonsoft.Json.JsonSerializer();
var stringWriter = new System.IO.StringWriter();
js.Serialize(stringWriter, yamlAsObject);
string jsonText = stringWriter.ToString();
JArray yamlJson = JArray.Parse(jsonText);
JToken attachedComponents = yamlJson[0]["attached_components"][1]["attached_components"][0]["attached_components"][0];
string target = (string)attachedComponents["macro_file"];
Console.WriteLine(target);
const string common = "package://forge_generic_attachment_descriptions/urdf/tools/d500_tabletop/";
if (target.Equals(common + "chucks.xacro") || target.Equals(common + "spacers.xacro") || target.Equals(common + "plates.xacro"))
attachedComponents["macro_file"] = common + attachmentName + ".xacro";
Console.WriteLine(attachedComponents["macro_file"]);
var backToObject = (object)yamlJson.ToObject(typeof(object));
Console.WriteLine(backToObject);
var serializer = new YamlDotNet.Serialization.Serializer();
string yaml = serializer.Serialize(backToObject);