diff --git a/SrcMod/Valve.NET/Vkv/VkvConvert.cs b/SrcMod/Valve.NET/Vkv/VkvConvert.cs index dc75301..e09b72a 100644 --- a/SrcMod/Valve.NET/Vkv/VkvConvert.cs +++ b/SrcMod/Valve.NET/Vkv/VkvConvert.cs @@ -19,16 +19,19 @@ public static class VkvConvert #region DeserializeNode public static VkvNode? DeserializeNode(StreamReader reader) => - DeserializeNode(reader, VkvOptions.Default); - public static VkvNode? DeserializeNode(StreamReader reader, VkvOptions options) + DeserializeNode(reader, VkvOptions.Default, out _); + public static VkvNode? DeserializeNode(StreamReader reader, VkvOptions options) => + DeserializeNode(reader, options, out _); + public static VkvNode? DeserializeNode(StreamReader reader, VkvOptions options, out string name) { try { - return DeserializeNode(reader, options, out _, null); + return DeserializeNode(reader, options, out name, null); } catch { if (!options.noExceptions) throw; + name = string.Empty; return null; } } diff --git a/SrcMod/Valve.NET/Vkv/VkvSerializer.cs b/SrcMod/Valve.NET/Vkv/VkvSerializer.cs index 9a18935..05be572 100644 --- a/SrcMod/Valve.NET/Vkv/VkvSerializer.cs +++ b/SrcMod/Valve.NET/Vkv/VkvSerializer.cs @@ -29,6 +29,23 @@ public class VkvSerializer if (!p_options.closeWhenFinished && p_options.resetStreamPosition) stream.Seek(pos, SeekOrigin.Begin); } } + public VkvNode? Deserialize(Stream stream, out string name) + { + long pos = stream.Position; + StreamReader reader = new(stream, leaveOpen: !p_options.closeWhenFinished); + try + { + VkvNode? result = VkvConvert.DeserializeNode(reader, p_options, out name); + reader.Close(); + if (!p_options.closeWhenFinished && p_options.resetStreamPosition) stream.Seek(pos, SeekOrigin.Begin); + return result; + } + finally + { + reader.Close(); + if (!p_options.closeWhenFinished && p_options.resetStreamPosition) stream.Seek(pos, SeekOrigin.Begin); + } + } public T? Deserialize(Stream stream) { VkvNode? result = Deserialize(stream);