24 string? message =
null;
25 List<object?>? args =
null;
34 while (reader.TokenType == JsonTokenType.None && reader.Read())
39 if (reader.TokenType != JsonTokenType.StartObject)
40 throw new JsonException(
"Could not locate JSON object.");
45 if (reader.TokenType == JsonTokenType.EndObject)
48 if (reader.TokenType == JsonTokenType.PropertyName)
50 if (
id ==
null && reader.ValueTextEquals(
"id"))
53 if (reader.TokenType != JsonTokenType.Number)
54 throw new JsonException();
56 id = reader.GetInt32();
60 if (level ==
null && reader.ValueTextEquals(
"level"))
63 if (reader.TokenType != JsonTokenType.String)
64 throw new JsonException();
66 level = ParseLevel(
ref reader);
70 if (message ==
null && reader.ValueTextEquals(
"message"))
73 if (reader.TokenType != JsonTokenType.String)
74 throw new JsonException();
76 message = reader.GetString();
80 if (args ==
null && reader.ValueTextEquals(
"args"))
84 if (reader.Read() ==
false || reader.TokenType != JsonTokenType.StartArray)
85 throw new JsonException(
"Expected array for 'args'.");
89 if (reader.TokenType == JsonTokenType.EndArray)
92 switch (reader.TokenType)
94 case JsonTokenType.String:
95 args.Add(reader.GetString());
97 case JsonTokenType.Number:
98 args.Add(ParseNumber(
ref reader));
100 case JsonTokenType.True:
103 case JsonTokenType.False:
106 case JsonTokenType.Null:
115 if (reader.ValueTextEquals(
"location"))
117 if (reader.Read() ==
false || reader.TokenType != JsonTokenType.StartObject)
118 throw new JsonException(
"Expected JSON object for 'location'.");
121 while (reader.Read())
123 if (reader.TokenType == JsonTokenType.EndObject)
126 if (reader.TokenType == JsonTokenType.PropertyName)
128 if (path ==
null && reader.ValueTextEquals(
"path"))
131 if (reader.TokenType != JsonTokenType.String)
132 throw new JsonException();
134 path = reader.GetString();
138 if (reader.ValueTextEquals(
"position"))
140 if (reader.Read() ==
false || reader.TokenType != JsonTokenType.StartArray)
141 throw new JsonException(
"Expected array for 'location/position' property.");
143 if (reader.Read() ==
false || reader.TokenType != JsonTokenType.Number || reader.TryGetInt32(out startLine) ==
false)
144 throw new JsonException(
"Could not read start line.");
145 if (reader.Read() ==
false || reader.TokenType != JsonTokenType.Number || reader.TryGetInt32(out startColumn) ==
false)
146 throw new JsonException(
"Could not read start column.");
147 if (reader.Read() ==
false || reader.TokenType != JsonTokenType.Number || reader.TryGetInt32(out endLine) ==
false)
148 throw new JsonException(
"Could not read end line.");
149 if (reader.Read() ==
false || reader.TokenType != JsonTokenType.Number || reader.TryGetInt32(out endColumn) ==
false)
150 throw new JsonException(
"Could not read end column.");
152 if (reader.Read() ==
false || reader.TokenType != JsonTokenType.EndArray)
153 throw new JsonException(
"Expected end of array.");
164 throw new JsonException(
"Missing 'id' property.");
166 throw new JsonException(
"Missing 'level' property.");
168 throw new JsonException(
"Missing 'message' property.");
181 if (reader.ValueTextEquals(
"trace"))
183 if (reader.ValueTextEquals(
"info"))
185 if (reader.ValueTextEquals(
"warning"))
187 if (reader.ValueTextEquals(
"error"))
189 if (reader.ValueTextEquals(
"fatal"))
192 throw new JsonException();
200 internal static object ParseNumber(
ref Utf8JsonReader reader)
202 if (reader.TryGetInt16(out var _short))
204 if (reader.TryGetInt32(out var _int))
206 if (reader.TryGetInt64(out var _long))
208 if (reader.TryGetSingle(out var _float))
210 if (reader.TryGetDouble(out var _double))
213 throw new JsonException();
219 public int Id {
get; } = Id;
229 public string Message {
get; } = Message;
234 public object?[] Args {
get; } = Args;