@@ -5,15 +5,16 @@ This Source Code Form is subject to the terms of the
55at http://mozilla.org/MPL/2.0/.
66----------------------------------------------------------*/
77
8- using System ;
9- using System . IO ;
108using Newtonsoft . Json ;
119using OneScript . Commons ;
1210using OneScript . Contexts ;
1311using OneScript . Exceptions ;
12+ using OneScript . StandardLibrary . Binary ;
1413using OneScript . StandardLibrary . Text ;
1514using ScriptEngine . Machine ;
1615using ScriptEngine . Machine . Contexts ;
16+ using System ;
17+ using System . IO ;
1718
1819namespace OneScript . StandardLibrary . Json
1920{
@@ -266,6 +267,38 @@ public void OpenFile(string JSONFileName, IValue encoding = null)
266267 } ;
267268 }
268269
270+ /// <summary>
271+ /// Устанавливает поток для чтения JSON данным объектом.
272+ /// Если перед вызовом данного метода уже производилось чтение JSON из другого файла, строки или потока,
273+ /// то чтение прекращается и объект инициализируется для чтения из указанного потока.
274+ /// </summary>
275+ /// <param name="stream">
276+ /// Поток для чтения текста JSON.</param>
277+ /// <param name="encoding">
278+ /// Позволяет задать кодировку входного потока.</param>
279+ [ ContextMethod ( "ОткрытьПоток" , "OpenStream" ) ]
280+ public void OpenStream ( IValue streamContext , IValue encoding = null )
281+ {
282+ if ( IsOpen ( ) )
283+ Close ( ) ;
284+
285+ var stream = streamContext switch
286+ {
287+ GenericStream s => s . GetUnderlyingStream ( ) ,
288+ FileStreamContext s => s . GetUnderlyingStream ( ) ,
289+ MemoryStreamContext s => s . GetUnderlyingStream ( ) ,
290+
291+ _ => throw RuntimeException . InvalidNthArgumentType ( 1 )
292+ } ;
293+
294+ var enc = encoding != null ? TextEncodingEnum . GetEncoding ( encoding ) : System . Text . Encoding . UTF8 ;
295+
296+ _reader = new JsonReaderInternal ( new StreamReader ( stream , enc ) )
297+ {
298+ SupportMultipleContent = true
299+ } ;
300+ }
301+
269302 /// <summary>
270303 /// Если текущее значение – начало массива или объекта, то пропускает его содержимое и конец.
271304 /// Для остальных типов значений работает аналогично методу Прочитать().
0 commit comments