@@ -494,7 +494,7 @@ private static void InitializeEncoders()
494494 [ SupressImportIntoVM ]
495495 internal override void RegisterHostDataMarshalers ( )
496496 {
497- DataMarshaler dataMarshalerToUse = HostDataMarshaler as DataMarshaler ;
497+ DataMarshaler ? dataMarshalerToUse = HostDataMarshaler as DataMarshaler ;
498498 dataMarshalerToUse ? . RegisterMarshaler ( ( PyObject pyObj ) =>
499499 {
500500 try
@@ -503,20 +503,37 @@ internal override void RegisterHostDataMarshalers()
503503 {
504504 if ( PyDict . IsDictType ( pyObj ) )
505505 {
506- using ( var pyDict = new PyDict ( pyObj ) )
506+ using var pyDict = new PyDict ( pyObj ) ;
507+ var dict = new PyDict ( ) ;
508+ foreach ( PyObject item in pyDict . Items ( ) )
507509 {
508- var dict = new PyDict ( ) ;
509- foreach ( PyObject item in pyDict . Items ( ) )
510- {
511- dict . SetItem (
512- ConverterExtension . ToPython ( dataMarshalerToUse . Marshal ( item . GetItem ( 0 ) ) ) ,
513- ConverterExtension . ToPython ( dataMarshalerToUse . Marshal ( item . GetItem ( 1 ) ) )
514- ) ;
515- }
516- return dict ;
510+ dict . SetItem (
511+ ConverterExtension . ToPython ( dataMarshalerToUse . Marshal ( item . GetItem ( 0 ) ) ) ,
512+ ConverterExtension . ToPython ( dataMarshalerToUse . Marshal ( item . GetItem ( 1 ) ) )
513+ ) ;
514+ }
515+ return dict ;
516+ }
517+
518+ if ( PyList . IsListType ( pyObj ) )
519+ {
520+ using var inputList = new PyList ( pyObj ) ;
521+ var outputList = new PyList ( ) ;
522+ foreach ( PyObject item in inputList )
523+ {
524+ outputList . Append ( ConverterExtension . ToPython ( dataMarshalerToUse . Marshal ( item ) ) ) ;
517525 }
526+ return outputList ;
518527 }
528+
519529 var unmarshalled = pyObj . AsManagedObject ( typeof ( object ) ) ;
530+
531+ // Avoid calling this marshaler infinitely.
532+ if ( unmarshalled is PyObject )
533+ {
534+ return unmarshalled ;
535+ }
536+
520537 return dataMarshalerToUse . Marshal ( unmarshalled ) ;
521538 }
522539 }
0 commit comments