44using  CommunityToolkit . WinUI ; 
55using  Microsoft . UI . Xaml . Controls ; 
66using  Microsoft . Web . WebView2 . Core ; 
7- using  Newtonsoft . Json ; 
87using  System . Reflection ; 
98using  System . Text ; 
9+ using  System . Text . Encodings . Web ; 
1010using  Windows . Foundation ; 
1111
1212namespace  Files . App . Extensions 
@@ -36,14 +36,14 @@ private struct WebMessage
3636
3737		private  struct  MethodWebMessage 
3838		{ 
39- 			public  string  Id  {  get ;  set ;  } 
39+ 			public  long  Id  {  get ;  set ;  } 
4040			public  string  Method  {  get ;  set ;  } 
4141			public  string  Args  {  get ;  set ;  } 
4242		} 
4343
4444		private  struct  PropertyWebMessage 
4545		{ 
46- 			public  string  Id  {  get ;  set ;  } 
46+ 			public  long  Id  {  get ;  set ;  } 
4747			public  string  Property  {  get ;  set ;  } 
4848			public  PropertyAction  Action  {  get ;  set ;  } 
4949			public  string  Value  {  get ;  set ;  } 
@@ -101,14 +101,16 @@ public static async Task AddWebAllowedObject<T>(this WebView2 webview, string na
101101
102102			var  handler  =  ( WebViewMessageReceivedHandler ) ( async  ( _ ,  e )  => 
103103			{ 
104- 				var  message  =  JsonConvert . DeserializeObject < WebMessage > ( e . TryGetWebMessageAsString ( ) ) ; 
104+ 				var  message  =  JsonSerializer . Deserialize < WebMessage > ( e . TryGetWebMessageAsString ( ) ,   new   JsonSerializerOptions ( )   {   PropertyNameCaseInsensitive   =   true   } ) ; 
105105				if  ( message . Guid  ==  methodsGuid ) 
106106				{ 
107- 					var  methodMessage  =  JsonConvert . DeserializeObject < MethodWebMessage > ( e . TryGetWebMessageAsString ( ) ) ; 
107+ 
108+ 					var  methodMessage  =  JsonSerializer . Deserialize < MethodWebMessage > ( e . TryGetWebMessageAsString ( ) ,  new  JsonSerializerOptions ( )  {  PropertyNameCaseInsensitive  =  true  } ) ; 
108109					var  method  =  methods [ methodMessage . Method ] ; 
109110					try 
110111					{ 
111- 						var  result  =  method . Invoke ( @object ,  JsonConvert . DeserializeObject < object [ ] > ( methodMessage . Args ) ) ; 
112+ 						var  args  =  JsonSerializer . Deserialize < JsonElement [ ] > ( methodMessage . Args ) . Zip ( method . GetParameters ( ) ,  ( val ,  args )  =>  new  {  val ,  args . ParameterType  } ) . Select ( item =>  item . val . Deserialize ( item . ParameterType ) ) ; 
113+ 						var  result  =  method . Invoke ( @object ,  args . ToArray ( ) ) ; 
112114						if  ( result  is  object ) 
113115						{ 
114116							var  resultType  =  result . GetType ( ) ; 
@@ -152,19 +154,19 @@ public static async Task AddWebAllowedObject<T>(this WebView2 webview, string na
152154								result  =  await  task ; 
153155							} 
154156						} 
155- 						var  json  =  JsonConvert . SerializeObject ( result ) ; 
157+ 						var  json  =  JsonSerializer . Serialize ( result ,   new   JsonSerializerOptions ( )   {   Encoder   =   JavaScriptEncoder . UnsafeRelaxedJsonEscaping   } ) ;   ; 
156158						await  webview . ExecuteScriptAsync ( $@ "{ name } ._callbacks.get({ methodMessage . Id } ).accept(JSON.parse({ json } )); { name } ._callbacks.delete({ methodMessage . Id } );") ; 
157159					} 
158160					catch  ( Exception  ex ) 
159161					{ 
160- 						var  json  =  JsonConvert . SerializeObject ( ex ,  new  JsonSerializerSettings ( )  {  Error  =  ( _ ,   e )   =>   e . ErrorContext . Handled   =   true  } ) ; 
162+ 						var  json  =  JsonSerializer . Serialize ( ex ,  new  JsonSerializerOptions ( )  {  Encoder  =  JavaScriptEncoder . UnsafeRelaxedJsonEscaping  } ) ; 
161163						await  webview . ExecuteScriptAsync ( $@ "{ name } ._callbacks.get({ methodMessage . Id } ).reject(JSON.parse({ json } )); { name } ._callbacks.delete({ methodMessage . Id } );") ; 
162164						//throw; 
163165					} 
164166				} 
165167				else  if  ( message . Guid  ==  propertiesGuid ) 
166168				{ 
167- 					var  propertyMessage  =  JsonConvert . DeserializeObject < PropertyWebMessage > ( e . TryGetWebMessageAsString ( ) ) ; 
169+ 					var  propertyMessage  =  JsonSerializer . Deserialize < PropertyWebMessage > ( e . TryGetWebMessageAsString ( ) ,   new   JsonSerializerOptions ( )   {   PropertyNameCaseInsensitive   =   true   } ) ; 
168170					var  property  =  properties [ propertyMessage . Property ] ; 
169171					try 
170172					{ 
@@ -175,17 +177,17 @@ public static async Task AddWebAllowedObject<T>(this WebView2 webview, string na
175177						} 
176178						else 
177179						{ 
178- 							var  value  =  JsonConvert . DeserializeObject ( propertyMessage . Value ,  property . PropertyType ) ; 
180+ 							var  value  =  JsonSerializer . Deserialize ( propertyMessage . Value ,  property . PropertyType ) ; 
179181							property . SetValue ( @object ,  value ) ; 
180182							result  =  new  object ( ) ; 
181183						} 
182184
183- 						var  json  =  JsonConvert . SerializeObject ( result ) ; 
185+ 						var  json  =  JsonSerializer . Serialize ( result ,   new   JsonSerializerOptions ( )   {   Encoder   =   JavaScriptEncoder . UnsafeRelaxedJsonEscaping   } ) ; 
184186						await  webview . ExecuteScriptAsync ( $@ "{ name } ._callbacks.get({ propertyMessage . Id } ).accept(JSON.parse({ json } )); { name } ._callbacks.delete({ propertyMessage . Id } );") ; 
185187					} 
186188					catch  ( Exception  ex ) 
187189					{ 
188- 						//var json = JsonConvert.SerializeObject (ex, new JsonSerializerSettings () { Error  = (_, e) => e.ErrorContext.Handled = true  }); 
190+ 						//var json = JsonSerializer.Serialize (ex, new JsonSerializerOptions () { Encoder  = JavaScriptEncoder.UnsafeRelaxedJsonEscaping  }); 
189191						//await webview.ExecuteScriptAsync($@"{name}._callbacks.get({propertyMessage.Id}).reject(JSON.parse({json})); {name}._callbacks.delete({propertyMessage.Id});"); 
190192						//throw; 
191193					} 
@@ -198,7 +200,7 @@ public static async Task AddWebAllowedObject<T>(this WebView2 webview, string na
198200
199201		public  static async  Task < string >  InvokeScriptAsync ( this  WebView2  webview ,  string  function ,  params  object [ ]  args ) 
200202		{ 
201- 			var  array  =  JsonConvert . SerializeObject ( args ) ; 
203+ 			var  array  =  JsonSerializer . Serialize ( args ,   new   JsonSerializerOptions ( )   {   Encoder   =   JavaScriptEncoder . UnsafeRelaxedJsonEscaping   } ) ; 
202204			string  result  =  null ; 
203205			// Tested and checked: this dispatch is required, even though the web view is in a different process 
204206			await  webview . DispatcherQueue . EnqueueAsync ( async  ( )  => 
@@ -207,7 +209,7 @@ await webview.DispatcherQueue.EnqueueAsync(async () =>
207209				try 
208210				{ 
209211					result  =  await  webview . ExecuteScriptAsync ( script ) . AsTask ( ) ; 
210- 					result  =  JsonConvert . DeserializeObject < string > ( result ) ; 
212+ 					result  =  JsonSerializer . Deserialize < string > ( result ) ; 
211213				} 
212214				catch  ( Exception  ex ) 
213215				{ 
0 commit comments