@@ -3190,7 +3190,7 @@ private void WriteDerivedTypes(StructMapping mapping, bool isTypedReturn, string
31903190 {
31913191 for ( StructMapping derived = mapping . DerivedMappings ; derived != null ; derived = derived . NextDerivedMapping )
31923192 {
3193- Writer . Write ( "else if (" ) ;
3193+ Writer . Write ( "if (" ) ;
31943194 WriteQNameEqual ( "xsiType" , derived . TypeName , derived . Namespace ) ;
31953195 Writer . WriteLine ( ")" ) ;
31963196 Writer . Indent ++ ;
@@ -3227,7 +3227,7 @@ private void WriteEnumAndArrayTypes()
32273227 if ( m is EnumMapping )
32283228 {
32293229 EnumMapping mapping = ( EnumMapping ) m ;
3230- Writer . Write ( "else if (" ) ;
3230+ Writer . Write ( "if (" ) ;
32313231 WriteQNameEqual ( "xsiType" , mapping . TypeName , mapping . Namespace ) ;
32323232 Writer . WriteLine ( ") {" ) ;
32333233 Writer . Indent ++ ;
@@ -3250,7 +3250,7 @@ private void WriteEnumAndArrayTypes()
32503250 ArrayMapping mapping = ( ArrayMapping ) m ;
32513251 if ( mapping . TypeDesc . HasDefaultConstructor )
32523252 {
3253- Writer . Write ( "else if (" ) ;
3253+ Writer . Write ( "if (" ) ;
32543254 WriteQNameEqual ( "xsiType" , mapping . TypeName , mapping . Namespace ) ;
32553255 Writer . WriteLine ( ") {" ) ;
32563256 Writer . Indent ++ ;
@@ -3397,10 +3397,10 @@ private void WriteLiteralStructMethod(StructMapping structMapping)
33973397 Writer . Indent -- ;
33983398 }
33993399 Writer . WriteLine ( "}" ) ;
3400+ Writer . WriteLine ( "else {" ) ;
3401+ Writer . Indent ++ ;
34003402 WriteDerivedTypes ( structMapping , ! useReflection && ! structMapping . TypeDesc . IsRoot , typeName ) ;
34013403 if ( structMapping . TypeDesc . IsRoot ) WriteEnumAndArrayTypes ( ) ;
3402- Writer . WriteLine ( "else" ) ;
3403- Writer . Indent ++ ;
34043404 if ( structMapping . TypeDesc . IsRoot )
34053405 Writer . Write ( "return ReadTypedPrimitive((" ) ;
34063406 else
@@ -3409,7 +3409,9 @@ private void WriteLiteralStructMethod(StructMapping structMapping)
34093409 Writer . WriteLine ( ")xsiType);" ) ;
34103410 Writer . Indent -- ;
34113411 Writer . WriteLine ( "}" ) ;
3412-
3412+ if ( structMapping . TypeDesc . IsRoot )
3413+ Writer . Indent -- ;
3414+ Writer . WriteLine ( "}" ) ;
34133415 if ( structMapping . TypeDesc . IsNullable )
34143416 Writer . WriteLine ( "if (isNull) return null;" ) ;
34153417
@@ -4350,16 +4352,27 @@ private void WriteMemberElementsIf(Member[] members, Member anyElement, string e
43504352 ElementAccessor e = elements [ j ] ;
43514353 string ns = e . Form == XmlSchemaForm . Qualified ? e . Namespace : "" ;
43524354 if ( ! isSequence && e . Any && ( e . Name == null || e . Name . Length == 0 ) ) continue ;
4353- if ( ! firstElement || ( ! isSequence && count > 0 ) )
4355+ if ( ! isSequence )
43544356 {
4355- Writer . Write ( "else " ) ;
4357+ if ( firstElement && count == 0 )
4358+ {
4359+ Writer . WriteLine ( "do {" ) ;
4360+ Writer . Indent ++ ;
4361+ }
43564362 }
4357- else if ( isSequence )
4363+ else
43584364 {
4359- Writer . Write ( "case " ) ;
4360- Writer . Write ( cases . ToString ( CultureInfo . InvariantCulture ) ) ;
4361- Writer . WriteLine ( ":" ) ;
4362- Writer . Indent ++ ;
4365+ if ( ! firstElement || ( ! isSequence && count > 0 ) )
4366+ {
4367+ Writer . Write ( "else " ) ;
4368+ }
4369+ else if ( isSequence )
4370+ {
4371+ Writer . Write ( "case " ) ;
4372+ Writer . Write ( cases . ToString ( CultureInfo . InvariantCulture ) ) ;
4373+ Writer . WriteLine ( ":" ) ;
4374+ Writer . Indent ++ ;
4375+ }
43634376 }
43644377 count ++ ;
43654378 firstElement = false ;
@@ -4449,6 +4462,10 @@ private void WriteMemberElementsIf(Member[] members, Member anyElement, string e
44494462 Writer . Write ( member . ParamsReadSource ) ;
44504463 Writer . WriteLine ( " = true;" ) ;
44514464 }
4465+ if ( ! isSequence )
4466+ {
4467+ Writer . WriteLine ( "break;" ) ;
4468+ }
44524469 Writer . Indent -- ;
44534470 Writer . WriteLine ( "}" ) ;
44544471 }
@@ -4475,10 +4492,10 @@ private void WriteMemberElementsIf(Member[] members, Member anyElement, string e
44754492 if ( count > 0 )
44764493 {
44774494 if ( isSequence )
4495+ {
44784496 Writer . WriteLine ( "default:" ) ;
4479- else
4480- Writer . WriteLine ( "else {" ) ;
4481- Writer . Indent ++ ;
4497+ Writer . Indent ++ ;
4498+ }
44824499 }
44834500 WriteMemberElementsElse ( anyElement , elementElseString ) ;
44844501 if ( count > 0 )
@@ -4488,7 +4505,14 @@ private void WriteMemberElementsIf(Member[] members, Member anyElement, string e
44884505 Writer . WriteLine ( "break;" ) ;
44894506 }
44904507 Writer . Indent -- ;
4491- Writer . WriteLine ( "}" ) ;
4508+ if ( ! isSequence )
4509+ {
4510+ Writer . WriteLine ( "} while (false);" ) ;
4511+ }
4512+ else
4513+ {
4514+ Writer . WriteLine ( "}" ) ;
4515+ }
44924516 }
44934517 }
44944518
0 commit comments