public void DeserializeNestedTypes_FromSpan() { var tagStruct = (StructTestTag)BlamSerializer.Deserialize(typeof(StructTestTag), testTagData, 0, 100, null); AssertData(tagStruct); tagStruct = BlamSerializer.Deserialize <StructTestTag>(testTagData, 0, 100, null); AssertData(tagStruct); var tagRef = (ClassTestTag)BlamSerializer.Deserialize(typeof(ClassTestTag), testTagData, 0, 100, null); AssertData(tagRef); tagRef = BlamSerializer.Deserialize <ClassTestTag>(testTagData, 0, 100, null); AssertData(tagRef); var tagStructInstance = new StructTestTag(); tagStructInstance = (StructTestTag)BlamSerializer.DeserializeInto(tagStructInstance, typeof(StructTestTag), testTagData, 0, 100, null); AssertData(tagStructInstance); tagStructInstance = new StructTestTag(); tagStructInstance = BlamSerializer.DeserializeInto <StructTestTag>(tagStructInstance, testTagData, 0, 100, null); AssertData(tagStructInstance); var tagRefInstance = new ClassTestTag(); tagRefInstance = (ClassTestTag)BlamSerializer.DeserializeInto(tagRefInstance, typeof(ClassTestTag), testTagData, 0, 100, null); AssertData(tagRefInstance); tagRefInstance = new ClassTestTag(); tagRefInstance = BlamSerializer.DeserializeInto <ClassTestTag>(tagRefInstance, testTagData, 0, 100, null); AssertData(tagRefInstance); }
private TMap CreateMap <TMap>(MapStream reader, byte streamId = 0) where TMap : IMap, new() { var map = new TMap(); BlamSerializer.DeserializeInto(map, reader.GetStream(streamId)); map.Load(streamId, reader); return(map); }
public static BaseTag CreateTag(uint id, string name, TagIndexEntry index, IH2Map map, MapStream reader) { var tagType = GetTypeForTag(index.Tag); BaseTag tag; if (tagType == null) { tag = new UnknownTag(id, index.Tag.ToString()) { Name = name, Length = (uint)index.DataSize, Offset = (uint)index.Offset.Value, InternalSecondaryMagic = map.SecondaryMagic + index.Offset.Value }; } else { BaseTag instance; // PERF: check ctor existence ahead of time try { //var ctor = tagType.GetConstructor(new[] { typeof(uint) }); //instance = (BaseTag)ctor.Invoke(new object[] { id }); instance = Activator.CreateInstance(tagType, new object[] { id }) as BaseTag; } catch { instance = (BaseTag)FormatterServices.GetUninitializedObject(tagType); } tag = (BaseTag)BlamSerializer.DeserializeInto(instance, tagType, reader.GetStream(map.OriginFile), index.Offset.Value, map.SecondaryMagic, map); } tag.Name = name; tag.TagIndexEntry = index; tag.DataFile = map.OriginFile; tag.PopulateExternalData(reader); return(tag); }
public void DeserializeNestedTypes_FromStream() { var tagStruct = (StructTestTag)BlamSerializer.Deserialize(typeof(StructTestTag), new MemoryStream(testTagData), 0, 100, null); AssertData(tagStruct); tagStruct = BlamSerializer.Deserialize <StructTestTag>(new MemoryStream(testTagData), 0, 100, null); AssertData(tagStruct); var tagRef = (ClassTestTag)BlamSerializer.Deserialize(typeof(ClassTestTag), new MemoryStream(testTagData), 0, 100, null); AssertData(tagRef); tagRef = BlamSerializer.Deserialize <ClassTestTag>(new MemoryStream(testTagData), 0, 100, null); AssertData(tagRef); var offsetData = new byte[24 + testTagData.Length]; testTagData.CopyTo(offsetData, 20); tagRef = BlamSerializer.Deserialize <ClassTestTag>(new MemoryStream(offsetData), 20, 80, null); AssertData(tagRef); var tagStructInstance = new StructTestTag(); tagStructInstance = (StructTestTag)BlamSerializer.DeserializeInto(tagStructInstance, typeof(StructTestTag), new MemoryStream(testTagData), 0, 100, null); AssertData(tagStructInstance); tagStructInstance = new StructTestTag(); tagStructInstance = BlamSerializer.DeserializeInto <StructTestTag>(tagStructInstance, new MemoryStream(testTagData), 0, 100, null); AssertData(tagStructInstance); var tagRefInstance = new ClassTestTag(); tagRefInstance = (ClassTestTag)BlamSerializer.DeserializeInto(tagRefInstance, typeof(ClassTestTag), new MemoryStream(testTagData), 0, 100, null); AssertData(tagRefInstance); tagRefInstance = new ClassTestTag(); tagRefInstance = BlamSerializer.DeserializeInto <ClassTestTag>(tagRefInstance, new MemoryStream(testTagData), 0, 100, null); AssertData(tagRefInstance); }