@@ -165,6 +165,7 @@ internal void Parse(List<VowpalWabbitJsonParseContext> path, VowpalWabbitMarshal
165
165
/// </summary>
166
166
public void Parse ( JsonReader reader , VowpalWabbitMarshalContext context , Namespace ns , List < VowpalWabbitJsonExtension > extensions = null )
167
167
{
168
+ this . namespaceStrings . Clear ( ) ;
168
169
this . reader = reader ;
169
170
this . extensions = extensions ;
170
171
@@ -345,9 +346,10 @@ private void ParseSpecialProperty(VowpalWabbitJsonParseContext context, string p
345
346
this . foundMulti = true ;
346
347
347
348
// forward to handler
348
- foreach ( var extension in this . extensions )
349
- if ( extension ( this . extensionState , propertyName ) )
350
- return ;
349
+ if ( this . extensions != null )
350
+ foreach ( var extension in this . extensions )
351
+ if ( extension ( this . extensionState , propertyName ) )
352
+ return ;
351
353
352
354
// if not handled, skip it
353
355
reader . Skip ( ) ;
@@ -563,7 +565,7 @@ private void ParseFeature(List<VowpalWabbitJsonParseContext> path, VowpalWabbitM
563
565
// probably best to ignore?
564
566
break ;
565
567
case JsonToken . StartArray :
566
- this . WrapInNamespace ( path , featureName , lastContext => this . ParseFeatureArray ( lastContext . Context , lastContext . Namespace ) ) ;
568
+ this . WrapInNamespace ( path , featureName , lastContext => this . ParseFeatureArray ( path ) ) ;
567
569
break ;
568
570
default :
569
571
throw new VowpalWabbitJsonException ( this . reader , "Unexpected token " + reader . TokenType + " while deserializing primitive feature" ) ;
@@ -573,8 +575,11 @@ private void ParseFeature(List<VowpalWabbitJsonParseContext> path, VowpalWabbitM
573
575
/// <summary>
574
576
/// Expects: "1,2.2,3]" (excluding the leading [)
575
577
/// </summary>
576
- private void ParseFeatureArray ( VowpalWabbitMarshalContext context , Namespace ns )
578
+ private void ParseFeatureArray ( List < VowpalWabbitJsonParseContext > path )
577
579
{
580
+ var context = path . Last ( ) . Context ;
581
+ var ns = path . Last ( ) . Namespace ;
582
+
578
583
ulong index = 0 ;
579
584
580
585
while ( reader . Read ( ) )
@@ -587,6 +592,9 @@ private void ParseFeatureArray(VowpalWabbitMarshalContext context, Namespace ns)
587
592
case JsonToken . Float :
588
593
MarshalFloatFeature ( context , ns , index , ( float ) ( double ) reader . Value ) ;
589
594
break ;
595
+ case JsonToken . StartObject :
596
+ ParseProperties ( path ) ;
597
+ break ;
590
598
case JsonToken . EndArray :
591
599
return ;
592
600
default :
0 commit comments