1- using System ;
1+ // #define USENEWTONSOFT
2+
3+ using System ;
24using System . Collections . Generic ;
35using System . Linq ;
46using System . Reflection ;
@@ -331,7 +333,12 @@ public string EmitContext(SchemaType.Context context)
331333 sb . AppendLine ( "using System.Linq;" ) ;
332334 sb . AppendLine ( "using System.Text;" ) ;
333335 sb . AppendLine ( "using System.Numerics;" ) ;
336+
337+ #if USENEWTONSOFT
334338 sb . AppendLine ( "using Newtonsoft.Json;" ) ;
339+ #else
340+ sb . AppendLine ( "using System.Text.Json;" ) ;
341+ #endif
335342 sb . AppendLine ( ) ;
336343
337344 sb . AppendLine ( $ "namespace { Constants . OutputNamespace } ") ;
@@ -471,7 +478,7 @@ internal IEnumerable<string> _GetClassField(FieldInfo f)
471478 yield return string . Empty ;
472479 }
473480
474- #endregion
481+ #endregion
475482 }
476483
477484 /// <summary>
@@ -503,6 +510,8 @@ public CSharpClassEmitter(CSharpEmitter emitter)
503510
504511 public bool HasBaseClass { get ; set ; }
505512
513+ private const string _READERMODIFIER = "ref " ;
514+
506515 #endregion
507516
508517 #region API
@@ -526,7 +535,7 @@ public void AddFields(ClassType type)
526535 this . AddFieldSerializerCase ( smethod ) ;
527536
528537 // emit deserializer
529- this . AddFieldDeserializerCase ( f . PersistentName , $ "{ frname } = DeserializePropertyValue<{ _Emitter . _GetRuntimeName ( etype ) } >(reader);") ;
538+ this . AddFieldDeserializerCase ( f . PersistentName , $ "{ frname } = DeserializePropertyValue<{ _Emitter . _GetRuntimeName ( etype ) } >({ _READERMODIFIER } reader);") ;
530539
531540 continue ;
532541 }
@@ -565,15 +574,15 @@ private string _GetJSonDeserializerMethod(FieldInfo f)
565574 if ( f . FieldType is ArrayType atype )
566575 {
567576 var titem = _Emitter . _GetRuntimeName ( atype . ItemType ) ;
568- return $ "DeserializePropertyList<{ titem } >(reader, { fname } );";
577+ return $ "DeserializePropertyList<{ titem } >({ _READERMODIFIER } reader, { fname } );";
569578 }
570579 else if ( f . FieldType is DictionaryType dtype )
571580 {
572581 var titem = _Emitter . _GetRuntimeName ( dtype . ValueType ) ;
573- return $ "DeserializePropertyDictionary<{ titem } >(reader, { fname } );";
582+ return $ "DeserializePropertyDictionary<{ titem } >({ _READERMODIFIER } reader, { fname } );";
574583 }
575584
576- return $ "{ fname } = DeserializePropertyValue<{ _Emitter . _GetRuntimeName ( f . FieldType ) } >(reader);";
585+ return $ "{ fname } = DeserializePropertyValue<{ _Emitter . _GetRuntimeName ( f . FieldType ) } >({ _READERMODIFIER } reader);";
577586 }
578587
579588 public void AddFieldSerializerCase ( string line ) { _SerializerBody . Add ( line ) ; }
@@ -585,6 +594,15 @@ public void AddFieldDeserializerCase(string persistentName, string line)
585594
586595 public IEnumerable < string > EmitCode ( )
587596 {
597+ #if USENEWTONSOFT
598+ var readerType = "JsonReader" ;
599+ var writerType = "JsonWriter" ;
600+ #else
601+ var readerType = "ref Utf8JsonReader" ;
602+ var writerType = "Utf8JsonWriter" ;
603+ #endif
604+
605+
588606 foreach ( var l in ClassSummary . EmitSummary ( 0 ) ) yield return l ;
589607
590608 yield return ClassDeclaration ;
@@ -597,7 +615,7 @@ public IEnumerable<string> EmitCode()
597615 yield return string . Empty ;
598616
599617 // yield return "/// <inheritdoc />".Indent(1);
600- yield return "protected override void SerializeProperties(JsonWriter writer)" . Indent ( 1 ) ;
618+ yield return $ "protected override void SerializeProperties({ writerType } writer)". Indent ( 1 ) ;
601619 yield return "{" . Indent ( 1 ) ;
602620 if ( HasBaseClass ) yield return "base.SerializeProperties(writer);" . Indent ( 2 ) ;
603621 foreach ( var l in _SerializerBody . Indent ( 2 ) ) yield return l ;
@@ -606,13 +624,13 @@ public IEnumerable<string> EmitCode()
606624 yield return string . Empty ;
607625
608626 // yield return "/// <inheritdoc />".Indent(1);
609- yield return "protected override void DeserializeProperty(string jsonPropertyName, JsonReader reader)" . Indent ( 1 ) ;
627+ yield return $ "protected override void DeserializeProperty(string jsonPropertyName, { readerType } reader)". Indent ( 1 ) ;
610628 yield return "{" . Indent ( 1 ) ;
611629 yield return "switch (jsonPropertyName)" . Indent ( 2 ) ;
612630 yield return "{" . Indent ( 2 ) ;
613631
614632 foreach ( var l in _DeserializerSwitchBody . Indent ( 3 ) ) yield return l ;
615- if ( HasBaseClass ) yield return "default: base.DeserializeProperty(jsonPropertyName, reader); break;" . Indent ( 3 ) ;
633+ if ( HasBaseClass ) yield return $ "default: base.DeserializeProperty(jsonPropertyName,{ _READERMODIFIER } reader); break;". Indent ( 3 ) ;
616634 else yield return "default: throw new NotImplementedException();" . Indent ( 3 ) ;
617635
618636 yield return "}" . Indent ( 2 ) ;
@@ -623,6 +641,6 @@ public IEnumerable<string> EmitCode()
623641 yield return "}" ;
624642 }
625643
626- #endregion
644+ #endregion
627645 }
628646}
0 commit comments