public NetworkObjectListListMetaDataList SerializeListMetaData()
        {
            var list = new NetworkObjectListListMetaDataList();

            foreach (var objectList in _objectLists)
            {
                list.MetaData.Add(new ListMetaData
                {
                    ListId = (uint)objectList.Id,
                    Name   = objectList.Name
                });
            }

            return(list);
        }
        public void DeserializeListMetaData(NetworkObjectListListMetaDataList list)
        {
            //TODO: maybe make this more robust
            if (_objectLists.Count > 0)
            {
                throw new InvalidOperationException("The object lists have already been created");
            }

            //Preallocate entries so we can insert properly
            for (var i = 0; i < list.MetaData.Count; ++i)
            {
                _objectLists.Add(null);
            }

            foreach (var metaData in list.MetaData)
            {
                if (_objectLists[(int)metaData.ListId] != null)
                {
                    throw new InvalidOperationException($"Received duplicate list metadata for list {metaData.Name} (id: {metaData.ListId})");
                }

                _objectLists[(int)metaData.ListId] = new NetworkObjectList(this, metaData.Name, (int)metaData.ListId);
            }
        }