@@ -5518,12 +5518,35 @@ private static void EmitReadKnownType(StringBuilder builder, ITypeSymbol typeSym
55185518 var innerIndent = indent + " " ;
55195519 if ( IsKnownScalar ( typeSymbol ) )
55205520 {
5521+ var scalarType = typeSymbol ;
5522+ var acceptsNull = ! typeSymbol . IsValueType ;
5523+ if ( typeSymbol is INamedTypeSymbol nullableType && nullableType . OriginalDefinition . SpecialType == SpecialType . System_Nullable_T )
5524+ {
5525+ scalarType = nullableType . TypeArguments [ 0 ] ;
5526+ acceptsNull = true ;
5527+ }
5528+
55215529 builder . Append ( innerIndent ) . AppendLine ( "if (reader.TokenType != global::SharpYaml.Serialization.YamlTokenType.Scalar)" ) ;
55225530 builder . Append ( innerIndent ) . AppendLine ( "{" ) ;
55235531 builder . Append ( innerIndent ) . AppendLine ( " throw global::SharpYaml.Serialization.YamlThrowHelper.ThrowExpectedScalar(reader);" ) ;
55245532 builder . Append ( innerIndent ) . AppendLine ( "}" ) ;
5525- EmitReadScalarAssignment ( builder , typeSymbol , valueVarName , indent : innerIndent ) ;
5526- builder . Append ( innerIndent ) . AppendLine ( "reader.Read();" ) ;
5533+ if ( acceptsNull )
5534+ {
5535+ builder . Append ( innerIndent ) . AppendLine ( "if (global::SharpYaml.Serialization.YamlScalar.IsNull(reader))" ) ;
5536+ builder . Append ( innerIndent ) . AppendLine ( "{" ) ;
5537+ builder . Append ( innerIndent ) . AppendLine ( " reader.Read();" ) ;
5538+ builder . Append ( innerIndent ) . AppendLine ( "}" ) ;
5539+ builder . Append ( innerIndent ) . AppendLine ( "else" ) ;
5540+ builder . Append ( innerIndent ) . AppendLine ( "{" ) ;
5541+ EmitReadScalarAssignment ( builder , scalarType , valueVarName , indent : innerIndent + " " ) ;
5542+ builder . Append ( innerIndent ) . AppendLine ( " reader.Read();" ) ;
5543+ builder . Append ( innerIndent ) . AppendLine ( "}" ) ;
5544+ }
5545+ else
5546+ {
5547+ EmitReadScalarAssignment ( builder , scalarType , valueVarName , indent : innerIndent ) ;
5548+ builder . Append ( innerIndent ) . AppendLine ( "reader.Read();" ) ;
5549+ }
55275550 builder . Append ( indent ) . AppendLine ( "}" ) ;
55285551 return ;
55295552 }
0 commit comments