1
1
namespace Schema . NET
2
2
{
3
3
using System ;
4
- using Newtonsoft . Json ;
5
- using Newtonsoft . Json . Linq ;
4
+ using System . Text . Json ;
5
+ using System . Text . Json . Serialization ;
6
6
7
7
/// <summary>
8
8
/// Converts a <see cref="JsonLdContext"/> object to and from JSON.
@@ -11,96 +11,81 @@ namespace Schema.NET
11
11
public class ContextJsonConverter : JsonConverter < JsonLdContext >
12
12
{
13
13
/// <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 )
15
15
{
16
16
#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 ) ;
25
19
#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 )
37
21
{
38
- throw new ArgumentNullException ( nameof ( existingValue ) ) ;
22
+ throw new ArgumentNullException ( nameof ( typeToConvert ) ) ;
39
23
}
40
24
41
- if ( serializer is null )
25
+ if ( options is null )
42
26
{
43
- throw new ArgumentNullException ( nameof ( serializer ) ) ;
27
+ throw new ArgumentNullException ( nameof ( options ) ) ;
44
28
}
45
29
#endif
30
+ var context = new JsonLdContext ( ) ;
46
31
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 )
52
35
{
53
- name = ( string ? ) reader . Value ;
54
- language = null ;
36
+ name = reader . GetString ( ) ;
55
37
}
56
- else if ( reader . TokenType == JsonToken . StartObject )
38
+ else if ( reader . TokenType == JsonTokenType . StartObject )
57
39
{
58
- var o = JObject . Load ( reader ) ;
40
+ var document = JsonDocument . ParseValue ( ref reader ) ;
59
41
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
+ }
62
46
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
+ }
65
51
}
66
52
else
67
53
{
68
- var a = JArray . Load ( reader ) ;
54
+ var array = JsonDocument . ParseValue ( ref reader ) . RootElement . EnumerateArray ( ) ;
69
55
70
- name = language = null ;
71
- foreach ( var entry in a )
56
+ foreach ( var entry in array )
72
57
{
73
- if ( entry . Type == JTokenType . String )
58
+ if ( entry . ValueKind == JsonValueKind . String )
74
59
{
75
- name ??= ( string ? ) entry ;
60
+ name ??= entry . GetString ( ) ;
76
61
}
77
- else
62
+ else if ( entry . ValueKind == JsonValueKind . Object )
78
63
{
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
+ }
86
73
}
87
74
}
88
75
}
89
76
90
- #pragma warning disable CA1062 // Validate arguments of public methods
91
77
context . Name = name ;
92
78
context . Language = language ;
93
- #pragma warning restore CA1062 // Validate arguments of public methods
94
79
return context ;
95
80
}
96
81
97
82
/// <inheritdoc />
98
- public override void WriteJson ( JsonWriter writer , JsonLdContext ? value , JsonSerializer serializer )
83
+ public override void Write ( Utf8JsonWriter writer , JsonLdContext value , JsonSerializerOptions options )
99
84
{
100
85
#if NET6_0_OR_GREATER
101
86
ArgumentNullException . ThrowIfNull ( writer ) ;
102
87
ArgumentNullException . ThrowIfNull ( value ) ;
103
- ArgumentNullException . ThrowIfNull ( serializer ) ;
88
+ ArgumentNullException . ThrowIfNull ( options ) ;
104
89
#else
105
90
if ( writer is null )
106
91
{
@@ -112,23 +97,23 @@ public override void WriteJson(JsonWriter writer, JsonLdContext? value, JsonSeri
112
97
throw new ArgumentNullException ( nameof ( value ) ) ;
113
98
}
114
99
115
- if ( serializer is null )
100
+ if ( options is null )
116
101
{
117
- throw new ArgumentNullException ( nameof ( serializer ) ) ;
102
+ throw new ArgumentNullException ( nameof ( options ) ) ;
118
103
}
119
104
#endif
120
105
121
106
if ( string . IsNullOrWhiteSpace ( value . Language ) )
122
107
{
123
- writer . WriteValue ( value . Name ) ;
108
+ writer . WriteStringValue ( value . Name ) ;
124
109
}
125
110
else
126
111
{
127
112
writer . WriteStartObject ( ) ;
128
113
writer . WritePropertyName ( "name" ) ;
129
- writer . WriteValue ( value . Name ) ;
114
+ writer . WriteStringValue ( value . Name ) ;
130
115
writer . WritePropertyName ( "@language" ) ;
131
- writer . WriteValue ( value . Language ) ;
116
+ writer . WriteStringValue ( value . Language ) ;
132
117
writer . WriteEndObject ( ) ;
133
118
}
134
119
}
0 commit comments