Commit 9e6a501
committed
fix: InvalidOperationException from RecipeService.Search()
Context: #1726
Context: #1728
Build and run `Chefs.csproj` for e.g. net10.0-desktop and NativeAOT
while using Uno 6.6.0-dev.3:
sed -i '' 's/"Uno.Sdk": ".*"/"Uno.Sdk": "6.6.0-dev.3"/g' global.json
git clean -xdf Chefs{,.Api}
dotnet publish -c Release -r osx-x64 -f net10.0-desktop -p:TargetFrameworkOverride=net10.0-desktop \
-bl Chefs/Chefs.csproj -p:UseSkiaRendering=true -p:SkiaPublishAot=true \
-p:SkiaPublishAot=true \
-p:IlcGenerateMapFile=true -p:IlcGenerateMstatFile=true -p:IlcGenerateDgmlFile=true -p:IlcGenerateMetadataLog=true \
-p:EmitCompilerGeneratedFiles=true -p:CompilerGeneratedFilesOutputPath=`pwd`/_gen
Chefs/bin/Release/net10.0-desktop/osx-x64/publish/Chefs
From the launch screen:
1. Click **Skip**
2. Click ** Sign in with Apple**
3. Click **🔍Search** on the left
4. In the Search box, type `m`
When doing this with e838af9, the search results screen shows:
> An error occurred.
![Search Results > An error occurred][0]
…which isn't particularly helpful.
If you do all this with #1728 applied, the Console log shows:
fail: Chefs.Business.Services.Recipes.RecipeService[0]
Failed to search recipes with term m
System.InvalidOperationException: Reflection-based serialization has been disabled for this application. Use the IServiceCollection.AddJsonTypeInfo() or IHostBuilder.UseSerialization(IHostBuilder, IEnumerable<IJsonTypeInfoResolver>, Action<IServiceCollection>) extension methods to enable JSON deserialization for type `System.Collections.Generic.Dictionary`2[[System.String, System.Private.CoreLib, Version=10.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e],[Chefs.Business.Models.SearchHistory, Chefs, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]`.
at Uno.Extensions.Serialization.SystemTextJsonSerializer.FromStream(Stream, Type) + 0x88
at Uno.Extensions.Serialization.SerializerExtensions.FromStream[T](ISerializer, Stream) + 0x34
at Uno.Extensions.Configuration.WritableOptions`1.<UpdateAsync>d__10.MoveNext() + 0x292
--- End of stack trace from previous location ---
at Chefs.Business.Services.Recipes.RecipeService.<SaveSearchHistory>d__51.MoveNext() + 0x5d
--- End of stack trace from previous location ---
at Chefs.Business.Services.Recipes.RecipeService.<SearchCore>d__24.MoveNext() + 0x8a
--- End of stack trace from previous location ---
at Chefs.Business.Services.Recipes.RecipeService.<Search>d__23.MoveNext() + 0x175
which shows what the problem is: `RecipeService.Search()` tries to
save the search history, but JSON serialization does not support
`Dictionary<string, SearchHistory>`, so an `InvalidOperationException`
is thrown.
(Unfortunately the exception is basically swallowed; PR #1728 adds
logging to that code path, and was needed to diagnose this issue.)
Update `MockEndpointContext` to emit JSON serialization metadata
for `Dictionary<string, SearchHistory>`, so that Search now works.
[0]: https://private-user-images.githubusercontent.com/155958/541004949-2be43b36-4eb1-42b1-b91d-e53a5e5545de.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Njk1NDE0NjMsIm5iZiI6MTc2OTU0MTE2MywicGF0aCI6Ii8xNTU5NTgvNTQxMDA0OTQ5LTJiZTQzYjM2LTRlYjEtNDJiMS1iOTFkLWU1M2E1ZTU1NDVkZS5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjYwMTI3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI2MDEyN1QxOTEyNDNaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yZDlkNzA5OTM0NzI2NWMxMjg4Njc0MTVmNWMyNjkzYTQzY2MzYWIxYTAzNGRlZjE5NjlmN2FjNzRkOGIxYjJiJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.a2gF7zICQIBUqWB-qdZv58UDg_DIwzKWAD8pNKJtu_g1 parent e838af9 commit 9e6a501
File tree
2 files changed
+2
-0
lines changed- Chefs
- Business/Services/Serialization
2 files changed
+2
-0
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
108 | 108 | | |
109 | 109 | | |
110 | 110 | | |
| 111 | + | |
111 | 112 | | |
112 | 113 | | |
113 | 114 | | |
| |||
Lines changed: 1 addition & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| 6 | + | |
6 | 7 | | |
7 | 8 | | |
8 | 9 | | |
| |||
0 commit comments