Exemplo n.º 1
0
        private void ReadSchemaArray(JsonReader reader, JSchema schema, string name, out JSchemaCollection schemas)
        {
            EnsureToken(reader, name, JsonToken.StartArray);

            schemas = new JSchemaCollection(schema);

            PopulateSchemaArray(reader, name, schemas);
        }
Exemplo n.º 2
0
 private void WriteSchemas(JSchema context, JSchemaCollection schemas, string name)
 {
     if (!schemas.IsNullOrEmpty())
     {
         _writer.WritePropertyName(name);
         _writer.WriteStartArray();
         foreach (JSchema s in schemas)
         {
             ReferenceOrWriteSchema(context, s, null);
         }
         _writer.WriteEndArray();
     }
 }
Exemplo n.º 3
0
        private object ReadType(JsonReader reader, JSchema schema, string name)
        {
            EnsureRead(reader, name);

            List <JSchemaType> types       = new List <JSchemaType>();
            JSchemaCollection  typeSchemas = null;
            bool isAny = false;

            switch (reader.TokenType)
            {
            case JsonToken.String:
                return(MapType(reader));

            case JsonToken.StartArray:
                while (reader.Read())
                {
                    switch (reader.TokenType)
                    {
                    case JsonToken.String:
                        JSchemaType?t = MapType(reader);

                        if (t == null)
                        {
                            isAny = true;
                        }
                        else
                        {
                            if (typeSchemas != null)
                            {
                                typeSchemas.Add(new JSchema {
                                    Type = t
                                });
                            }
                            else
                            {
                                types.Add(t.Value);
                            }
                        }
                        break;

                    case JsonToken.Comment:
                        // nom nom nom
                        break;

                    case JsonToken.EndArray:
                        // type of "any" removes all other type constraints
                        if (isAny)
                        {
                            return(null);
                        }

                        if (typeSchemas != null)
                        {
                            return(typeSchemas);
                        }

                        JSchemaType finalType = JSchemaType.None;
                        foreach (JSchemaType type in types)
                        {
                            finalType = finalType | type;
                        }

                        return(finalType);

                    default:
                        if (EnsureVersion(SchemaVersion.Draft3, SchemaVersion.Draft3))
                        {
                            if (typeSchemas == null)
                            {
                                typeSchemas = new JSchemaCollection(schema);
                                foreach (JSchemaType type in types)
                                {
                                    typeSchemas.Add(new JSchema
                                    {
                                        Type = type
                                    });
                                }
                                types = null;
                            }
                            int count           = typeSchemas.Count;
                            JSchemaCollection l = typeSchemas;
                            LoadAndSetSchema(reader, s => SetAtIndex(l, count, s));
                        }
                        else
                        {
                            throw JSchemaReaderException.Create(reader, _baseUri, "Expected string token for type, got {0}.".FormatWith(CultureInfo.InvariantCulture, reader.TokenType));
                        }
                        break;
                    }
                }
                break;

            default:
                throw JSchemaReaderException.Create(reader, _baseUri, "Expected array or string for '{0}', got {1}.".FormatWith(CultureInfo.InvariantCulture, Constants.PropertyNames.Type, reader.TokenType));
            }

            throw JSchemaReaderException.Create(reader, _baseUri, "Unexpected end when reading schema type.");
        }