public override bool Serialize <TSerializedResource>(KeyedResource owner, ref TSerializedResource[] serializedResources, ref short length, params Type[] expectedTypes) { var ownerLength = _offset - owner.Offset; var remainingLength = length - ownerLength; var buffer = new byte[remainingLength]; if (Read(buffer, buffer.Length) != remainingLength) { return(false); } using (var subSerializer = new ReadResourceSerializer(new MemoryStream(buffer))) { var children = new List <TSerializedResource>(); for (;;) { // :frowning: var child = (TSerializedResource)(SerializedResource)subSerializer.SerializeKeyedResource(expectedTypes); if (child == null) { serializedResources = children.ToArray(); return(true); } children.Add(child); } } }
public static TResource Deserialize <TResource>(Stream stream) where TResource : SerializedResource, new() { var deserializer = new ReadResourceSerializer(stream); var resource = new TResource(); deserializer.Serialize(ref resource); return(resource); }