diff --git a/src/Microsoft.OpenApi/Any/IOpenApiAny.cs b/src/Microsoft.OpenApi/Any/IOpenApiAny.cs
new file mode 100644
index 000000000..1e99f7773
--- /dev/null
+++ b/src/Microsoft.OpenApi/Any/IOpenApiAny.cs
@@ -0,0 +1,26 @@
+//---------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
+//
+//---------------------------------------------------------------------
+
+namespace Microsoft.OpenApi
+{
+ public enum AnyTypeKind
+ {
+ None,
+
+ Primitive,
+
+ Null,
+
+ Array,
+
+ Object
+ }
+
+ public interface IOpenApiAny
+ {
+ AnyTypeKind AnyKind { get; }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Any/OpenApiArray.cs b/src/Microsoft.OpenApi/Any/OpenApiArray.cs
new file mode 100644
index 000000000..6e7760e93
--- /dev/null
+++ b/src/Microsoft.OpenApi/Any/OpenApiArray.cs
@@ -0,0 +1,15 @@
+//---------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
+//
+//---------------------------------------------------------------------
+
+using System.Collections.Generic;
+
+namespace Microsoft.OpenApi
+{
+ public class OpenApiArray : List, IOpenApiAny
+ {
+ public AnyTypeKind AnyKind { get; } = AnyTypeKind.Array;
+ }
+}
diff --git a/src/Microsoft.OpenApi/Any/OpenApiBinary.cs b/src/Microsoft.OpenApi/Any/OpenApiBinary.cs
new file mode 100644
index 000000000..0abec2348
--- /dev/null
+++ b/src/Microsoft.OpenApi/Any/OpenApiBinary.cs
@@ -0,0 +1,17 @@
+//---------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
+//
+//---------------------------------------------------------------------
+
+namespace Microsoft.OpenApi
+{
+ public class OpenApiBinary : OpenApiPrimitive
+ {
+ public override PrimitiveTypeKind PrimitiveKind { get; } = PrimitiveTypeKind.Binary;
+
+ public OpenApiBinary(byte[] value)
+ : base(value)
+ { }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Any/OpenApiBoolean.cs b/src/Microsoft.OpenApi/Any/OpenApiBoolean.cs
new file mode 100644
index 000000000..60331a222
--- /dev/null
+++ b/src/Microsoft.OpenApi/Any/OpenApiBoolean.cs
@@ -0,0 +1,17 @@
+//---------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
+//
+//---------------------------------------------------------------------
+
+namespace Microsoft.OpenApi
+{
+ public class OpenApiBoolean : OpenApiPrimitive
+ {
+ public override PrimitiveTypeKind PrimitiveKind { get; } = PrimitiveTypeKind.Boolean;
+
+ public OpenApiBoolean(bool value)
+ : base(value)
+ { }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Any/OpenApiByte.cs b/src/Microsoft.OpenApi/Any/OpenApiByte.cs
new file mode 100644
index 000000000..14e51965c
--- /dev/null
+++ b/src/Microsoft.OpenApi/Any/OpenApiByte.cs
@@ -0,0 +1,17 @@
+//---------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
+//
+//---------------------------------------------------------------------
+
+namespace Microsoft.OpenApi
+{
+ public class OpenApiByte : OpenApiPrimitive
+ {
+ public override PrimitiveTypeKind PrimitiveKind { get; } = PrimitiveTypeKind.Byte;
+
+ public OpenApiByte(byte value)
+ : base(value)
+ { }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Any/OpenApiDate.cs b/src/Microsoft.OpenApi/Any/OpenApiDate.cs
new file mode 100644
index 000000000..01a21d2a7
--- /dev/null
+++ b/src/Microsoft.OpenApi/Any/OpenApiDate.cs
@@ -0,0 +1,19 @@
+//---------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
+//
+//---------------------------------------------------------------------
+
+using System;
+
+namespace Microsoft.OpenApi
+{
+ public class OpenApiDate : OpenApiPrimitive
+ {
+ public override PrimitiveTypeKind PrimitiveKind { get; } = PrimitiveTypeKind.Date;
+
+ public OpenApiDate(DateTime value)
+ : base(value)
+ { }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Any/OpenApiDateTime.cs b/src/Microsoft.OpenApi/Any/OpenApiDateTime.cs
new file mode 100644
index 000000000..f11d44be5
--- /dev/null
+++ b/src/Microsoft.OpenApi/Any/OpenApiDateTime.cs
@@ -0,0 +1,19 @@
+//---------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
+//
+//---------------------------------------------------------------------
+
+using System;
+
+namespace Microsoft.OpenApi
+{
+ public class OpenApiDateTime : OpenApiPrimitive
+ {
+ public override PrimitiveTypeKind PrimitiveKind { get; } = PrimitiveTypeKind.DateTime;
+
+ public OpenApiDateTime(DateTimeOffset value)
+ : base(value)
+ { }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Any/OpenApiDouble.cs b/src/Microsoft.OpenApi/Any/OpenApiDouble.cs
new file mode 100644
index 000000000..cb5323330
--- /dev/null
+++ b/src/Microsoft.OpenApi/Any/OpenApiDouble.cs
@@ -0,0 +1,17 @@
+//---------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
+//
+//---------------------------------------------------------------------
+
+namespace Microsoft.OpenApi
+{
+ public class OpenApiDouble : OpenApiPrimitive
+ {
+ public override PrimitiveTypeKind PrimitiveKind { get; } = PrimitiveTypeKind.Double;
+
+ public OpenApiDouble(float value)
+ : base(value)
+ { }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Any/OpenApiFloat.cs b/src/Microsoft.OpenApi/Any/OpenApiFloat.cs
new file mode 100644
index 000000000..65102542e
--- /dev/null
+++ b/src/Microsoft.OpenApi/Any/OpenApiFloat.cs
@@ -0,0 +1,17 @@
+//---------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
+//
+//---------------------------------------------------------------------
+
+namespace Microsoft.OpenApi
+{
+ public class OpenApiFloat : OpenApiPrimitive
+ {
+ public override PrimitiveTypeKind PrimitiveKind { get; } = PrimitiveTypeKind.Float;
+
+ public OpenApiFloat(float value)
+ : base(value)
+ { }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Any/OpenApiInteger.cs b/src/Microsoft.OpenApi/Any/OpenApiInteger.cs
new file mode 100644
index 000000000..285f741be
--- /dev/null
+++ b/src/Microsoft.OpenApi/Any/OpenApiInteger.cs
@@ -0,0 +1,17 @@
+//---------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
+//
+//---------------------------------------------------------------------
+
+namespace Microsoft.OpenApi
+{
+ public class OpenApiInteger : OpenApiPrimitive
+ {
+ public override PrimitiveTypeKind PrimitiveKind { get; } = PrimitiveTypeKind.Integer;
+
+ public OpenApiInteger(int value)
+ : base(value)
+ { }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Any/OpenApiLong.cs b/src/Microsoft.OpenApi/Any/OpenApiLong.cs
new file mode 100644
index 000000000..9fc6aac59
--- /dev/null
+++ b/src/Microsoft.OpenApi/Any/OpenApiLong.cs
@@ -0,0 +1,18 @@
+//---------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
+//
+//---------------------------------------------------------------------
+
+namespace Microsoft.OpenApi
+{
+ public class OpenApiLong : OpenApiPrimitive
+ {
+ public override PrimitiveTypeKind PrimitiveKind { get; } = PrimitiveTypeKind.Long;
+
+ public OpenApiLong(long value)
+ : base(value)
+ {
+ }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Any/OpenApiNull.cs b/src/Microsoft.OpenApi/Any/OpenApiNull.cs
new file mode 100644
index 000000000..410f8ab9b
--- /dev/null
+++ b/src/Microsoft.OpenApi/Any/OpenApiNull.cs
@@ -0,0 +1,13 @@
+//---------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
+//
+//---------------------------------------------------------------------
+
+namespace Microsoft.OpenApi
+{
+ public class OpenApiNull : IOpenApiAny
+ {
+ public AnyTypeKind AnyKind { get; } = AnyTypeKind.Null;
+ }
+}
diff --git a/src/Microsoft.OpenApi/Any/OpenApiObject.cs b/src/Microsoft.OpenApi/Any/OpenApiObject.cs
new file mode 100644
index 000000000..a673dc60e
--- /dev/null
+++ b/src/Microsoft.OpenApi/Any/OpenApiObject.cs
@@ -0,0 +1,15 @@
+//---------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
+//
+//---------------------------------------------------------------------
+
+using System.Collections.Generic;
+
+namespace Microsoft.OpenApi
+{
+ public class OpenApiObject : Dictionary, IOpenApiAny
+ {
+ public AnyTypeKind AnyKind { get; } = AnyTypeKind.Object;
+ }
+}
diff --git a/src/Microsoft.OpenApi/Any/OpenApiPassword.cs b/src/Microsoft.OpenApi/Any/OpenApiPassword.cs
new file mode 100644
index 000000000..e2c315dd6
--- /dev/null
+++ b/src/Microsoft.OpenApi/Any/OpenApiPassword.cs
@@ -0,0 +1,17 @@
+//---------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
+//
+//---------------------------------------------------------------------
+
+namespace Microsoft.OpenApi
+{
+ public class OpenApiPassword : OpenApiPrimitive
+ {
+ public override PrimitiveTypeKind PrimitiveKind { get; } = PrimitiveTypeKind.Password;
+
+ public OpenApiPassword(string value)
+ : base(value)
+ { }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Any/OpenApiPrimitive.cs b/src/Microsoft.OpenApi/Any/OpenApiPrimitive.cs
new file mode 100644
index 000000000..c85a6c1ad
--- /dev/null
+++ b/src/Microsoft.OpenApi/Any/OpenApiPrimitive.cs
@@ -0,0 +1,37 @@
+//---------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
+//
+//---------------------------------------------------------------------
+
+namespace Microsoft.OpenApi
+{
+ public enum PrimitiveTypeKind
+ {
+ Integer,
+ Long,
+ Float,
+ Double,
+ String,
+ Byte,
+ Binary,
+ Boolean,
+ Date,
+ DateTime,
+ Password
+ }
+
+ public abstract class OpenApiPrimitive : IOpenApiAny
+ {
+ public AnyTypeKind AnyKind { get; } = AnyTypeKind.Primitive;
+
+ public abstract PrimitiveTypeKind PrimitiveKind { get; }
+
+ public T Value { get; }
+
+ public OpenApiPrimitive(T value)
+ {
+ Value = value;
+ }
+ }
+}
diff --git a/src/Microsoft.OpenApi/Any/OpenApiString.cs b/src/Microsoft.OpenApi/Any/OpenApiString.cs
new file mode 100644
index 000000000..8f3c0fc34
--- /dev/null
+++ b/src/Microsoft.OpenApi/Any/OpenApiString.cs
@@ -0,0 +1,17 @@
+//---------------------------------------------------------------------
+//
+// Copyright (C) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information.
+//
+//---------------------------------------------------------------------
+
+namespace Microsoft.OpenApi
+{
+ public class OpenApiString : OpenApiPrimitive
+ {
+ public override PrimitiveTypeKind PrimitiveKind { get; } = PrimitiveTypeKind.String;
+
+ public OpenApiString(string value)
+ : base(value)
+ { }
+ }
+}