diff --git a/SrcMod/Valve.NET/Vkv/ObjectModels/VkvKeyNameAttribute.cs b/SrcMod/Valve.NET/Vkv/ObjectModels/VkvKeyNameAttribute.cs new file mode 100644 index 0000000..4c54a97 --- /dev/null +++ b/SrcMod/Valve.NET/Vkv/ObjectModels/VkvKeyNameAttribute.cs @@ -0,0 +1,9 @@ +namespace Valve.Vkv.ObjectModels; + +[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false, Inherited = false)] +public class VkvKeyNameAttribute : Attribute +{ + public readonly string name; + + public VkvKeyNameAttribute(string name) => this.name = name; +} diff --git a/SrcMod/Valve.NET/Vkv/VkvConvert.cs b/SrcMod/Valve.NET/Vkv/VkvConvert.cs index 45f8ff3..5458bd9 100644 --- a/SrcMod/Valve.NET/Vkv/VkvConvert.cs +++ b/SrcMod/Valve.NET/Vkv/VkvConvert.cs @@ -176,9 +176,9 @@ public static class VkvConvert foreach (FieldInfo field in validFields) { - string name = field.Name; + VkvKeyNameAttribute? namingAttribute = field.GetCustomAttribute(); - VkvNode? subNode = node[name]; + VkvNode? subNode = node[namingAttribute?.name ?? field.Name]; if (subNode is null) continue; object? result = FromNodeTree(field.FieldType, subNode, options); @@ -187,9 +187,9 @@ public static class VkvConvert } foreach (PropertyInfo prop in validProperties) { - string name = prop.Name; + VkvKeyNameAttribute? namingAttribute = prop.GetCustomAttribute(); - VkvNode? subNode = node[name]; + VkvNode? subNode = node[namingAttribute?.name ?? prop.Name]; if (subNode is null) continue; object? result = FromNodeTree(prop.PropertyType, subNode, options); @@ -400,11 +400,13 @@ public static class VkvConvert foreach (FieldInfo field in validFields) { - tree[field.Name] = ToNodeTree(field.GetValue(obj), options); + VkvKeyNameAttribute? namingAttribute = field.GetCustomAttribute(); + tree[namingAttribute?.name ?? field.Name] = ToNodeTree(field.GetValue(obj), options); } foreach (PropertyInfo prop in validProperties) { - tree[prop.Name] = ToNodeTree(prop.GetValue(obj), options); + VkvKeyNameAttribute? namingAttribute = prop.GetCustomAttribute(); + tree[namingAttribute?.name ?? prop.Name] = ToNodeTree(prop.GetValue(obj), options); } return tree;