/// <summary> /// Serialize all meta data on the user object into JSON for storage within UserData table. /// </summary> /// <param name="user"></param> /// <returns></returns> async Task <IEnumerable <UserData> > SerializeMetaDataAsync(User user) { // Get all existing user data var data = await _userDataStore.GetByUserIdAsync(user.Id); // Prepare list to search, use dummy list if needed var dataList = data?.ToList() ?? new List <UserData>(); // Iterate all meta data on the supplied user object, // check if a key already exists, if so update existing key var output = new List <UserData>(); foreach (var item in user.MetaData) { var key = item.Key.FullName; var userData = dataList.FirstOrDefault(d => d.Key == key); if (userData != null) { userData.Value = item.Value.Serialize(); } else { userData = new UserData() { Key = key, Value = item.Value.Serialize() }; } output.Add(userData); } return(output); }