11namespace Schema . NET
22{
33 using System ;
4- using Newtonsoft . Json ;
5- using Newtonsoft . Json . Linq ;
4+ using System . Text . Json ;
5+ using System . Text . Json . Serialization ;
66
77 /// <summary>
88 /// Converts a <see cref="JsonLdContext"/> object to and from JSON.
@@ -11,96 +11,81 @@ namespace Schema.NET
1111 public class ContextJsonConverter : JsonConverter < JsonLdContext >
1212 {
1313 /// <inheritdoc />
14- public override JsonLdContext ReadJson ( JsonReader reader , Type objectType , JsonLdContext ? existingValue , bool hasExistingValue , JsonSerializer serializer )
14+ public override JsonLdContext Read ( ref Utf8JsonReader reader , Type typeToConvert , JsonSerializerOptions options )
1515 {
1616#if NET6_0_OR_GREATER
17- ArgumentNullException . ThrowIfNull ( reader ) ;
18- ArgumentNullException . ThrowIfNull ( objectType ) ;
19- if ( hasExistingValue )
20- {
21- ArgumentNullException . ThrowIfNull ( existingValue ) ;
22- }
23-
24- ArgumentNullException . ThrowIfNull ( serializer ) ;
17+ ArgumentNullException . ThrowIfNull ( typeToConvert ) ;
18+ ArgumentNullException . ThrowIfNull ( options ) ;
2519#else
26- if ( reader is null )
27- {
28- throw new ArgumentNullException ( nameof ( reader ) ) ;
29- }
30-
31- if ( objectType is null )
32- {
33- throw new ArgumentNullException ( nameof ( objectType ) ) ;
34- }
35-
36- if ( hasExistingValue && existingValue is null )
20+ if ( typeToConvert is null )
3721 {
38- throw new ArgumentNullException ( nameof ( existingValue ) ) ;
22+ throw new ArgumentNullException ( nameof ( typeToConvert ) ) ;
3923 }
4024
41- if ( serializer is null )
25+ if ( options is null )
4226 {
43- throw new ArgumentNullException ( nameof ( serializer ) ) ;
27+ throw new ArgumentNullException ( nameof ( options ) ) ;
4428 }
4529#endif
30+ var context = new JsonLdContext ( ) ;
4631
47- var context = hasExistingValue ? existingValue ! : new JsonLdContext ( ) ;
48-
49- string ? name ;
50- string ? language ;
51- if ( reader . TokenType == JsonToken . String )
32+ string ? name = null ;
33+ string ? language = null ;
34+ if ( reader . TokenType == JsonTokenType . String )
5235 {
53- name = ( string ? ) reader . Value ;
54- language = null ;
36+ name = reader . GetString ( ) ;
5537 }
56- else if ( reader . TokenType == JsonToken . StartObject )
38+ else if ( reader . TokenType == JsonTokenType . StartObject )
5739 {
58- var o = JObject . Load ( reader ) ;
40+ var document = JsonDocument . ParseValue ( ref reader ) ;
5941
60- var nameProperty = o . Property ( "name" , StringComparison . OrdinalIgnoreCase ) ;
61- name = nameProperty ? . Value ? . ToString ( ) ?? "https://schema.org" ;
42+ if ( document . RootElement . TryGetProperty ( "name" , out var nameElement ) )
43+ {
44+ name = nameElement . GetString ( ) ?? Constants . HttpsSchemaOrgUrl ;
45+ }
6246
63- var languageProperty = o . Property ( "@language" , StringComparison . OrdinalIgnoreCase ) ;
64- language = languageProperty ? . Value ? . ToString ( ) ;
47+ if ( document . RootElement . TryGetProperty ( "@language" , out var languageElement ) )
48+ {
49+ language = languageElement . GetString ( ) ;
50+ }
6551 }
6652 else
6753 {
68- var a = JArray . Load ( reader ) ;
54+ var array = JsonDocument . ParseValue ( ref reader ) . RootElement . EnumerateArray ( ) ;
6955
70- name = language = null ;
71- foreach ( var entry in a )
56+ foreach ( var entry in array )
7257 {
73- if ( entry . Type == JTokenType . String )
58+ if ( entry . ValueKind == JsonValueKind . String )
7459 {
75- name ??= ( string ? ) entry ;
60+ name ??= entry . GetString ( ) ;
7661 }
77- else
62+ else if ( entry . ValueKind == JsonValueKind . Object )
7863 {
79- var o = ( JObject ) entry ;
80-
81- var nameProperty = o . Property ( "name" , StringComparison . OrdinalIgnoreCase ) ;
82- name ??= nameProperty ? . Value ? . ToString ( ) ?? "https://schema.org" ;
83-
84- var languageProperty = o . Property ( "@language" , StringComparison . OrdinalIgnoreCase ) ;
85- language ??= languageProperty ? . Value ? . ToString ( ) ;
64+ if ( entry . TryGetProperty ( "name" , out var nameElement ) )
65+ {
66+ name ??= nameElement . GetString ( ) ?? Constants . HttpsSchemaOrgUrl ;
67+ }
68+
69+ if ( entry . TryGetProperty ( "@language" , out var languageElement ) )
70+ {
71+ language ??= languageElement . GetString ( ) ;
72+ }
8673 }
8774 }
8875 }
8976
90- #pragma warning disable CA1062 // Validate arguments of public methods
9177 context . Name = name ;
9278 context . Language = language ;
93- #pragma warning restore CA1062 // Validate arguments of public methods
9479 return context ;
9580 }
9681
9782 /// <inheritdoc />
98- public override void WriteJson ( JsonWriter writer , JsonLdContext ? value , JsonSerializer serializer )
83+ public override void Write ( Utf8JsonWriter writer , JsonLdContext value , JsonSerializerOptions options )
9984 {
10085#if NET6_0_OR_GREATER
10186 ArgumentNullException . ThrowIfNull ( writer ) ;
10287 ArgumentNullException . ThrowIfNull ( value ) ;
103- ArgumentNullException . ThrowIfNull ( serializer ) ;
88+ ArgumentNullException . ThrowIfNull ( options ) ;
10489#else
10590 if ( writer is null )
10691 {
@@ -112,23 +97,23 @@ public override void WriteJson(JsonWriter writer, JsonLdContext? value, JsonSeri
11297 throw new ArgumentNullException ( nameof ( value ) ) ;
11398 }
11499
115- if ( serializer is null )
100+ if ( options is null )
116101 {
117- throw new ArgumentNullException ( nameof ( serializer ) ) ;
102+ throw new ArgumentNullException ( nameof ( options ) ) ;
118103 }
119104#endif
120105
121106 if ( string . IsNullOrWhiteSpace ( value . Language ) )
122107 {
123- writer . WriteValue ( value . Name ) ;
108+ writer . WriteStringValue ( value . Name ) ;
124109 }
125110 else
126111 {
127112 writer . WriteStartObject ( ) ;
128113 writer . WritePropertyName ( "name" ) ;
129- writer . WriteValue ( value . Name ) ;
114+ writer . WriteStringValue ( value . Name ) ;
130115 writer . WritePropertyName ( "@language" ) ;
131- writer . WriteValue ( value . Language ) ;
116+ writer . WriteStringValue ( value . Language ) ;
132117 writer . WriteEndObject ( ) ;
133118 }
134119 }
0 commit comments