public static object ToObject(this Variant variant, VariantExtension.KeyOptions options) { switch (variant.type()) { case Variant.Type.Int64: return(variant.int64_value()); case Variant.Type.Double: return(variant.double_value()); case Variant.Type.Bool: return(variant.bool_value()); case Variant.Type.StaticString: case Variant.Type.MutableString: return(variant.string_value()); case Variant.Type.Vector: { List <object> list = new List <object>(); foreach (Variant current in variant.vector()) { list.Add(current.ToObject(options)); } return(list); } case Variant.Type.Map: { if (options == VariantExtension.KeyOptions.UseStringKeys) { return(variant.map().ToStringVariantMap(options)); } Dictionary <object, object> dictionary = new Dictionary <object, object>(); foreach (KeyValuePair <Variant, Variant> current2 in variant.map()) { object key = current2.Key.ToObject(options); object value = current2.Value.ToObject(options); dictionary[key] = value; } return(dictionary); } case Variant.Type.StaticBlob: case Variant.Type.MutableBlob: return(variant.blob_as_bytes()); } return(null); }
public static IDictionary <string, object> ToStringVariantMap(this VariantVariantMap originalMap, VariantExtension.KeyOptions options) { Dictionary <string, object> dictionary = new Dictionary <string, object>(); foreach (KeyValuePair <Variant, Variant> current in originalMap) { string key; if (current.Key.is_string()) { key = current.Key.string_value(); } else { if (!current.Key.is_fundamental_type()) { throw new InvalidCastException("Unable to convert dictionary keys to string"); } key = current.Key.AsString().string_value(); } object value = current.Value.ToObject(options); dictionary[key] = value; } return(dictionary); }