Problem
SaveAndReturnMessageItem() uses both System.Text.Json (for serialization) and Newtonsoft.Json (for deserialization), causing:
- Double deserialization overhead
- Inconsistent behavior between libraries
- Unnecessary dependency on Newtonsoft.Json
- Performance degradation
Current Implementation
Location: SamSmithNZ.Web/Services/BaseServiceApiClient.cs (Lines 83-99)
string jsonInString = JsonSerializer.Serialize(obj); // System.Text.Json
// ...
dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(responseString); // Newtonsoft
result = Newtonsoft.Json.JsonConvert.DeserializeObject<T>(jsonObj?.ToString()); // Double deserialize!
Proposed Solution
string jsonInString = JsonSerializer.Serialize(obj);
StringContent content = new(jsonInString, Encoding.UTF8, "application/json");
HttpResponseMessage response = await _client.PostAsync(url, content);
if (response.IsSuccessStatusCode)
{
await using Stream stream = await response.Content.ReadAsStreamAsync();
return await JsonSerializer.DeserializeAsync<T>(stream);
}
return default;
Benefits
- ✅ 50%+ faster deserialization
- ✅ Lower memory allocation
- ✅ Consistent JSON library usage
- ✅ Removes dynamic type usage
Acceptance Criteria
Problem
SaveAndReturnMessageItem() uses both System.Text.Json (for serialization) and Newtonsoft.Json (for deserialization), causing:
Current Implementation
Location:
SamSmithNZ.Web/Services/BaseServiceApiClient.cs(Lines 83-99)Proposed Solution
Benefits
Acceptance Criteria