diff --git a/Codecs/Binary.cs b/Codecs/Binary.cs index 699c33d..65691d8 100644 --- a/Codecs/Binary.cs +++ b/Codecs/Binary.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; @@ -315,7 +315,7 @@ public Datamodel Decode(int encoding_version, string format, int format_version, foreach (int attr_index in Enumerable.Range(0, Reader.ReadInt32())) { var name = ReadString_Raw(); - var value = DecodeAttribute(dm); + var value = DecodeAttribute(dm, true); if (prefix_elem == 0) // skip subsequent elements...are they considered "old versions"? dm.PrefixAttributes[name] = value; } @@ -354,7 +354,7 @@ public Datamodel Decode(int encoding_version, string format, int format_version, } else { - elem.Add(name, DecodeAttribute(dm)); + elem.Add(name, DecodeAttribute(dm, false)); } } } @@ -366,15 +366,15 @@ public Datamodel Decode(int encoding_version, string format, int format_version, public object DeferredDecodeAttribute(Datamodel dm, long offset) { Reader.BaseStream.Seek(offset, SeekOrigin.Begin); - return DecodeAttribute(dm); + return DecodeAttribute(dm, false); } - object DecodeAttribute(Datamodel dm) + object DecodeAttribute(Datamodel dm, bool prefix) { var type = IdToType(Reader.ReadByte()); if (!Datamodel.IsDatamodelArrayType(type)) - return ReadValue(dm, type, EncodingVersion < 4); + return ReadValue(dm, type, EncodingVersion < 4 || prefix); else { var count = Reader.ReadInt32();