| File: SdkDirectoryWorkloadManifestProvider.JsonReader.cs | Web Access |
| Project: src\sdk\src\Resolvers\Microsoft.NET.Sdk.WorkloadManifestReader\Microsoft.NET.Sdk.WorkloadManifestReader.csproj (Microsoft.NET.Sdk.WorkloadManifestReader) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Runtime.Serialization; using System.Text.Json; using Microsoft.NET.Sdk.Localization; using static Microsoft.NET.Sdk.WorkloadManifestReader.WorkloadManifestReader; namespace Microsoft.NET.Sdk.WorkloadManifestReader { public partial class SdkDirectoryWorkloadManifestProvider { static class JsonReader { /// <summary> /// this expects the reader to be before the value token, and leaves it on the last token of the value /// </summary> internal static bool ConsumeValue(ref Utf8JsonStreamReader reader) { if (!reader.Read()) { return false; } var tokenType = reader.TokenType; if (tokenType != JsonTokenType.StartArray && tokenType != JsonTokenType.StartObject) { return true; } var depth = reader.CurrentDepth; do { if (!reader.Read()) { return false; } } while (reader.CurrentDepth > depth); return true; } internal static void ConsumeToken(ref Utf8JsonStreamReader reader, JsonTokenType expected) { if (reader.Read() && expected == reader.TokenType) { return; } ThrowUnexpectedTokenException(ref reader, expected); } private static void ThrowUnexpectedTokenException(ref Utf8JsonStreamReader reader, JsonTokenType expected) { string key; if (expected.IsBool()) { key = Strings.ExpectedBoolAtOffset; } else if (expected.IsInt()) { key = Strings.ExpectedIntegerAtOffset; } else if (expected == JsonTokenType.String) { key = Strings.ExpectedStringAtOffset; } else { throw new JsonFormatException(Strings.ExpectedTokenAtOffset, expected, reader.TokenStartIndex); } throw new JsonFormatException(key, reader.TokenStartIndex); } internal static string? ReadString(ref Utf8JsonStreamReader reader) { ConsumeToken(ref reader, JsonTokenType.String); return reader.GetString(); } } [Serializable] public class JsonFormatException : Exception { public JsonFormatException() { } public JsonFormatException(string messageFormat, params object?[] args) : base(string.Format(messageFormat, args)) { } public JsonFormatException(string message) : base(message) { } public JsonFormatException(string message, Exception inner) : base(message, inner) { } #if NET8_0_OR_GREATER [Obsolete(DiagnosticId = "SYSLIB0051")] // add this attribute to the serialization ctor #endif protected JsonFormatException(SerializationInfo info, StreamingContext context) : base(info, context) { } } } }