/// <summary> /// Unpacks the content of this Any message into the target message type, /// which must match the type URL within this Any message. /// </summary> /// <typeparam name="T">The type of message to unpack the content into.</typeparam> /// <returns>The unpacked message.</returns> /// <exception cref="InvalidProtocolBufferException">The target message type doesn't match the type URL in this message</exception> public T Unpack <T>() where T : IMessage, new() { // Note: this doesn't perform as well is it might. We could take a MessageParser<T> in an alternative overload, // which would be expected to perform slightly better... although the difference is likely to be negligible. T target = new T(); if (GetTypeName(TypeUrl) != target.Descriptor.FullName) { throw InvalidProtocolBufferException.OnThrowMessage( $"Full type name for {target.Descriptor.Name} is {target.Descriptor.FullName}; Any message's type url is {TypeUrl}"); } target.MergeFrom(Value); return(target); }