private static PSObject ReadObject()

in src/PSRule/Common/JsonConverters.cs [184:241]


        private static PSObject ReadObject(JsonReader reader, bool bindTargetInfo, TargetSourceInfo sourceInfo)
        {
            if (reader.TokenType != JsonToken.StartObject || !reader.Read())
                throw new PipelineSerializationException(PSRuleResources.ReadJsonFailed);

            var result = new PSObject();
            string name = null;
            var lineNumber = 0;
            var linePosition = 0;

            if (bindTargetInfo && reader is IJsonLineInfo lineInfo && lineInfo.HasLineInfo())
            {
                lineNumber = lineInfo.LineNumber;
                linePosition = lineInfo.LinePosition;
            }

            // Read each token
            while (reader.TokenType != JsonToken.EndObject)
            {
                switch (reader.TokenType)
                {
                    case JsonToken.PropertyName:
                        name = reader.Value.ToString();
                        if (name == PSRuleTargetInfo.PropertyName)
                        {
                            var targetInfo = ReadInfo(reader);
                            if (targetInfo != null)
                                result.SetTargetInfo(targetInfo);
                        }
                        break;

                    case JsonToken.StartObject:
                        var value = ReadObject(reader, bindTargetInfo: false, sourceInfo: null);
                        result.Properties.Add(new PSNoteProperty(name, value: value));
                        break;

                    case JsonToken.StartArray:
                        var items = ReadArray(reader: reader);
                        result.Properties.Add(new PSNoteProperty(name, value: items));
                        break;

                    case JsonToken.Comment:
                        break;

                    default:
                        result.Properties.Add(new PSNoteProperty(name, value: reader.Value));
                        break;
                }
                if (!reader.Read() || reader.TokenType == JsonToken.None)
                    throw new PipelineSerializationException(PSRuleResources.ReadJsonFailed);
            }
            if (bindTargetInfo)
            {
                result.UseTargetInfo(out var info);
                info.SetSource(sourceInfo?.File, lineNumber, linePosition);
            }
            return result;
        }