diff --git a/base/graphql-php/test/inputs/graphql/github1.graphql/default/TopLevel.php b/head/graphql-php/test/inputs/graphql/github1.graphql/default/TopLevel.php
index 1b8c111..3471378 100644
--- a/base/graphql-php/test/inputs/graphql/github1.graphql/default/TopLevel.php
+++ b/head/graphql-php/test/inputs/graphql/github1.graphql/default/TopLevel.php
@@ -169,6 +169,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromErrors($obj->{'errors'})
@@ -270,6 +273,9 @@ class Data {
      * @throws Exception
      */
     public static function from(stdClass $obj): Data {
+        if (!property_exists($obj, 'viewer')) {
+            throw new Exception("Missing required property");
+        }
         return new Data(
          Data::fromViewer($obj->{'viewer'})
         );
@@ -430,6 +436,12 @@ class User {
      * @throws Exception
      */
     public static function from(stdClass $obj): User {
+        if (!property_exists($obj, 'login')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'realName')) {
+            throw new Exception("Missing required property");
+        }
         return new User(
          User::fromLogin($obj->{'login'})
         ,User::fromRealName($obj->{'realName'})
@@ -530,6 +542,9 @@ class Error {
      * @throws Exception
      */
     public static function from(stdClass $obj): Error {
+        if (!property_exists($obj, 'message')) {
+            throw new Exception("Missing required property");
+        }
         return new Error(
          Error::fromMessage($obj->{'message'})
         );
diff --git a/base/graphql-php/test/inputs/graphql/github2.graphql/default/TopLevel.php b/head/graphql-php/test/inputs/graphql/github2.graphql/default/TopLevel.php
index 17558f3..b71a3ca 100644
--- a/base/graphql-php/test/inputs/graphql/github2.graphql/default/TopLevel.php
+++ b/head/graphql-php/test/inputs/graphql/github2.graphql/default/TopLevel.php
@@ -169,6 +169,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromErrors($obj->{'errors'})
@@ -270,6 +273,9 @@ class Data {
      * @throws Exception
      */
     public static function from(stdClass $obj): Data {
+        if (!property_exists($obj, 'viewer')) {
+            throw new Exception("Missing required property");
+        }
         return new Data(
          Data::fromViewer($obj->{'viewer'})
         );
@@ -421,6 +427,12 @@ class User {
      * @throws Exception
      */
     public static function from(stdClass $obj): User {
+        if (!property_exists($obj, 'login')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'repositories')) {
+            throw new Exception("Missing required property");
+        }
         return new User(
          User::fromLogin($obj->{'login'})
         ,User::fromRepositories($obj->{'repositories'})
@@ -605,6 +617,12 @@ class RepositoryConnection {
      * @throws Exception
      */
     public static function from(stdClass $obj): RepositoryConnection {
+        if (!property_exists($obj, 'totalCount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nodes')) {
+            throw new Exception("Missing required property");
+        }
         return new RepositoryConnection(
          RepositoryConnection::fromTotalCount($obj->{'totalCount'})
         ,RepositoryConnection::fromNodes($obj->{'nodes'})
@@ -705,6 +723,9 @@ class Repository {
      * @throws Exception
      */
     public static function from(stdClass $obj): Repository {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new Repository(
          Repository::fromName($obj->{'name'})
         );
@@ -803,6 +824,9 @@ class Error {
      * @throws Exception
      */
     public static function from(stdClass $obj): Error {
+        if (!property_exists($obj, 'message')) {
+            throw new Exception("Missing required property");
+        }
         return new Error(
          Error::fromMessage($obj->{'message'})
         );
diff --git a/base/graphql-php/test/inputs/graphql/github3.graphql/default/TopLevel.php b/head/graphql-php/test/inputs/graphql/github3.graphql/default/TopLevel.php
index 6124208..a353f3d 100644
--- a/base/graphql-php/test/inputs/graphql/github3.graphql/default/TopLevel.php
+++ b/head/graphql-php/test/inputs/graphql/github3.graphql/default/TopLevel.php
@@ -169,6 +169,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromErrors($obj->{'errors'})
@@ -270,6 +273,9 @@ class Data {
      * @throws Exception
      */
     public static function from(stdClass $obj): Data {
+        if (!property_exists($obj, 'viewer')) {
+            throw new Exception("Missing required property");
+        }
         return new Data(
          Data::fromViewer($obj->{'viewer'})
         );
@@ -431,6 +437,12 @@ class User {
      * @throws Exception
      */
     public static function from(stdClass $obj): User {
+        if (!property_exists($obj, 'login')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'repository')) {
+            throw new Exception("Missing required property");
+        }
         return new User(
          User::fromLogin($obj->{'login'})
         ,User::fromRepository($obj->{'repository'})
@@ -532,6 +544,9 @@ class Repository {
      * @throws Exception
      */
     public static function from(stdClass $obj): Repository {
+        if (!property_exists($obj, 'pullRequests')) {
+            throw new Exception("Missing required property");
+        }
         return new Repository(
          Repository::fromPullRequests($obj->{'pullRequests'})
         );
@@ -662,6 +677,9 @@ class PullRequestConnection {
      * @throws Exception
      */
     public static function from(stdClass $obj): PullRequestConnection {
+        if (!property_exists($obj, 'nodes')) {
+            throw new Exception("Missing required property");
+        }
         return new PullRequestConnection(
          PullRequestConnection::fromNodes($obj->{'nodes'})
         );
@@ -761,6 +779,9 @@ class PullRequest {
      * @throws Exception
      */
     public static function from(stdClass $obj): PullRequest {
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
         return new PullRequest(
          PullRequest::fromState($obj->{'state'})
         );
@@ -912,6 +933,9 @@ class Error {
      * @throws Exception
      */
     public static function from(stdClass $obj): Error {
+        if (!property_exists($obj, 'message')) {
+            throw new Exception("Missing required property");
+        }
         return new Error(
          Error::fromMessage($obj->{'message'})
         );
diff --git a/base/graphql-php/test/inputs/graphql/github4.graphql/default/TopLevel.php b/head/graphql-php/test/inputs/graphql/github4.graphql/default/TopLevel.php
index 91c3bf2..9882b12 100644
--- a/base/graphql-php/test/inputs/graphql/github4.graphql/default/TopLevel.php
+++ b/head/graphql-php/test/inputs/graphql/github4.graphql/default/TopLevel.php
@@ -169,6 +169,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromErrors($obj->{'errors'})
@@ -270,6 +273,9 @@ class Data {
      * @throws Exception
      */
     public static function from(stdClass $obj): Data {
+        if (!property_exists($obj, 'viewer')) {
+            throw new Exception("Missing required property");
+        }
         return new Data(
          Data::fromViewer($obj->{'viewer'})
         );
@@ -493,6 +499,15 @@ class User {
      * @throws Exception
      */
     public static function from(stdClass $obj): User {
+        if (!property_exists($obj, 'login')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'repository')) {
+            throw new Exception("Missing required property");
+        }
         return new User(
          User::fromLogin($obj->{'login'})
         ,User::fromName($obj->{'name'})
@@ -596,6 +611,9 @@ class Repository {
      * @throws Exception
      */
     public static function from(stdClass $obj): Repository {
+        if (!property_exists($obj, 'pullRequests')) {
+            throw new Exception("Missing required property");
+        }
         return new Repository(
          Repository::fromPullRequests($obj->{'pullRequests'})
         );
@@ -726,6 +744,9 @@ class PullRequestConnection {
      * @throws Exception
      */
     public static function from(stdClass $obj): PullRequestConnection {
+        if (!property_exists($obj, 'nodes')) {
+            throw new Exception("Missing required property");
+        }
         return new PullRequestConnection(
          PullRequestConnection::fromNodes($obj->{'nodes'})
         );
@@ -825,6 +846,9 @@ class PullRequest {
      * @throws Exception
      */
     public static function from(stdClass $obj): PullRequest {
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
         return new PullRequest(
          PullRequest::fromState($obj->{'state'})
         );
@@ -976,6 +1000,9 @@ class Error {
      * @throws Exception
      */
     public static function from(stdClass $obj): Error {
+        if (!property_exists($obj, 'message')) {
+            throw new Exception("Missing required property");
+        }
         return new Error(
          Error::fromMessage($obj->{'message'})
         );
diff --git a/base/graphql-php/test/inputs/graphql/github5.graphql/default/TopLevel.php b/head/graphql-php/test/inputs/graphql/github5.graphql/default/TopLevel.php
index 2474cd3..393698c 100644
--- a/base/graphql-php/test/inputs/graphql/github5.graphql/default/TopLevel.php
+++ b/head/graphql-php/test/inputs/graphql/github5.graphql/default/TopLevel.php
@@ -169,6 +169,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromErrors($obj->{'errors'})
@@ -270,6 +273,9 @@ class Data {
      * @throws Exception
      */
     public static function from(stdClass $obj): Data {
+        if (!property_exists($obj, 'viewer')) {
+            throw new Exception("Missing required property");
+        }
         return new Data(
          Data::fromViewer($obj->{'viewer'})
         );
@@ -430,6 +436,9 @@ class User {
      * @throws Exception
      */
     public static function from(stdClass $obj): User {
+        if (!property_exists($obj, 'login')) {
+            throw new Exception("Missing required property");
+        }
         return new User(
          User::fromLogin($obj->{'login'})
         ,User::fromName($obj->{'name'})
@@ -530,6 +539,9 @@ class Error {
      * @throws Exception
      */
     public static function from(stdClass $obj): Error {
+        if (!property_exists($obj, 'message')) {
+            throw new Exception("Missing required property");
+        }
         return new Error(
          Error::fromMessage($obj->{'message'})
         );
diff --git a/base/graphql-php/test/inputs/graphql/github6.graphql/default/TopLevel.php b/head/graphql-php/test/inputs/graphql/github6.graphql/default/TopLevel.php
index 6a0372e..d8a95ab 100644
--- a/base/graphql-php/test/inputs/graphql/github6.graphql/default/TopLevel.php
+++ b/head/graphql-php/test/inputs/graphql/github6.graphql/default/TopLevel.php
@@ -169,6 +169,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromErrors($obj->{'errors'})
@@ -280,6 +283,9 @@ class Data {
      * @throws Exception
      */
     public static function from(stdClass $obj): Data {
+        if (!property_exists($obj, 'resource')) {
+            throw new Exception("Missing required property");
+        }
         return new Data(
          Data::fromResource($obj->{'resource'})
         );
@@ -440,6 +446,9 @@ class UniformResourceLocatable {
      * @throws Exception
      */
     public static function from(stdClass $obj): UniformResourceLocatable {
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new UniformResourceLocatable(
          UniformResourceLocatable::fromURL($obj->{'url'})
         ,UniformResourceLocatable::fromLogin($obj->{'login'})
@@ -540,6 +549,9 @@ class Error {
      * @throws Exception
      */
     public static function from(stdClass $obj): Error {
+        if (!property_exists($obj, 'message')) {
+            throw new Exception("Missing required property");
+        }
         return new Error(
          Error::fromMessage($obj->{'message'})
         );
diff --git a/base/graphql-php/test/inputs/graphql/github7.graphql/default/TopLevel.php b/head/graphql-php/test/inputs/graphql/github7.graphql/default/TopLevel.php
index 7c11ccb..7514791 100644
--- a/base/graphql-php/test/inputs/graphql/github7.graphql/default/TopLevel.php
+++ b/head/graphql-php/test/inputs/graphql/github7.graphql/default/TopLevel.php
@@ -169,6 +169,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromErrors($obj->{'errors'})
@@ -270,6 +273,9 @@ class Data {
      * @throws Exception
      */
     public static function from(stdClass $obj): Data {
+        if (!property_exists($obj, 'viewer')) {
+            throw new Exception("Missing required property");
+        }
         return new Data(
          Data::fromViewer($obj->{'viewer'})
         );
@@ -474,6 +480,15 @@ class User {
      * @throws Exception
      */
     public static function from(stdClass $obj): User {
+        if (!property_exists($obj, 'login')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'starredRepositories')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'repositories')) {
+            throw new Exception("Missing required property");
+        }
         return new User(
          User::fromLogin($obj->{'login'})
         ,User::fromStarredRepositories($obj->{'starredRepositories'})
@@ -608,6 +623,9 @@ class RepositoryConnection {
      * @throws Exception
      */
     public static function from(stdClass $obj): RepositoryConnection {
+        if (!property_exists($obj, 'edges')) {
+            throw new Exception("Missing required property");
+        }
         return new RepositoryConnection(
          RepositoryConnection::fromEdges($obj->{'edges'})
         );
@@ -717,6 +735,9 @@ class RepositoryEdge {
      * @throws Exception
      */
     public static function from(stdClass $obj): RepositoryEdge {
+        if (!property_exists($obj, 'node')) {
+            throw new Exception("Missing required property");
+        }
         return new RepositoryEdge(
          RepositoryEdge::fromNode($obj->{'node'})
         );
@@ -1027,6 +1048,21 @@ class Repository {
      * @throws Exception
      */
     public static function from(stdClass $obj): Repository {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stargazers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forks')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'watchers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'issues')) {
+            throw new Exception("Missing required property");
+        }
         return new Repository(
          Repository::fromName($obj->{'name'})
         ,Repository::fromStargazers($obj->{'stargazers'})
@@ -1133,6 +1169,9 @@ class Connection {
      * @throws Exception
      */
     public static function from(stdClass $obj): Connection {
+        if (!property_exists($obj, 'totalCount')) {
+            throw new Exception("Missing required property");
+        }
         return new Connection(
          Connection::fromTotalCount($obj->{'totalCount'})
         );
@@ -1231,6 +1270,9 @@ class Error {
      * @throws Exception
      */
     public static function from(stdClass $obj): Error {
+        if (!property_exists($obj, 'message')) {
+            throw new Exception("Missing required property");
+        }
         return new Error(
          Error::fromMessage($obj->{'message'})
         );
diff --git a/base/graphql-php/test/inputs/graphql/github8.graphql/default/TopLevel.php b/head/graphql-php/test/inputs/graphql/github8.graphql/default/TopLevel.php
index d670372..1023076 100644
--- a/base/graphql-php/test/inputs/graphql/github8.graphql/default/TopLevel.php
+++ b/head/graphql-php/test/inputs/graphql/github8.graphql/default/TopLevel.php
@@ -169,6 +169,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromErrors($obj->{'errors'})
@@ -280,6 +283,9 @@ class Data {
      * @throws Exception
      */
     public static function from(stdClass $obj): Data {
+        if (!property_exists($obj, 'repository')) {
+            throw new Exception("Missing required property");
+        }
         return new Data(
          Data::fromRepository($obj->{'repository'})
         );
@@ -504,6 +510,15 @@ class Repository {
      * @throws Exception
      */
     public static function from(stdClass $obj): Repository {
+        if (!property_exists($obj, 'nameWithOwner')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'n303')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'n307')) {
+            throw new Exception("Missing required property");
+        }
         return new Repository(
          Repository::fromNameWithOwner($obj->{'nameWithOwner'})
         ,Repository::fromN303($obj->{'n303'})
@@ -892,6 +907,9 @@ class Error {
      * @throws Exception
      */
     public static function from(stdClass $obj): Error {
+        if (!property_exists($obj, 'message')) {
+            throw new Exception("Missing required property");
+        }
         return new Error(
          Error::fromMessage($obj->{'message'})
         );
diff --git a/base/graphql-php/test/inputs/graphql/github9.graphql/default/TopLevel.php b/head/graphql-php/test/inputs/graphql/github9.graphql/default/TopLevel.php
index ab59c1c..128754a 100644
--- a/base/graphql-php/test/inputs/graphql/github9.graphql/default/TopLevel.php
+++ b/head/graphql-php/test/inputs/graphql/github9.graphql/default/TopLevel.php
@@ -169,6 +169,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromErrors($obj->{'errors'})
@@ -280,6 +283,9 @@ class Data {
      * @throws Exception
      */
     public static function from(stdClass $obj): Data {
+        if (!property_exists($obj, 'addReaction')) {
+            throw new Exception("Missing required property");
+        }
         return new Data(
          Data::fromAddReaction($obj->{'addReaction'})
         );
@@ -494,6 +500,15 @@ class AddReactionPayload {
      * @throws Exception
      */
     public static function from(stdClass $obj): AddReactionPayload {
+        if (!property_exists($obj, 'clientMutationId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'reaction')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subject')) {
+            throw new Exception("Missing required property");
+        }
         return new AddReactionPayload(
          AddReactionPayload::fromClientMutationID($obj->{'clientMutationId'})
         ,AddReactionPayload::fromReaction($obj->{'reaction'})
@@ -597,6 +612,9 @@ class Reaction {
      * @throws Exception
      */
     public static function from(stdClass $obj): Reaction {
+        if (!property_exists($obj, 'content')) {
+            throw new Exception("Missing required property");
+        }
         return new Reaction(
          Reaction::fromContent($obj->{'content'})
         );
@@ -834,6 +852,12 @@ class Reactable {
      * @throws Exception
      */
     public static function from(stdClass $obj): Reactable {
+        if (!property_exists($obj, 'viewerCanReact')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'reactionGroups')) {
+            throw new Exception("Missing required property");
+        }
         return new Reactable(
          Reactable::fromViewerCanReact($obj->{'viewerCanReact'})
         ,Reactable::fromReactionGroups($obj->{'reactionGroups'})
@@ -934,6 +958,9 @@ class Error {
      * @throws Exception
      */
     public static function from(stdClass $obj): Error {
+        if (!property_exists($obj, 'message')) {
+            throw new Exception("Missing required property");
+        }
         return new Error(
          Error::fromMessage($obj->{'message'})
         );
diff --git a/base/php/test/inputs/json/misc/00ec5.json/default/TopLevel.php b/head/php/test/inputs/json/misc/00ec5.json/default/TopLevel.php
index 6f37aed..b7535c9 100644
--- a/base/php/test/inputs/json/misc/00ec5.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/00ec5.json/default/TopLevel.php
@@ -479,6 +479,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'basePath')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'definitions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'host')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'info')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'paths')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'produces')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'schemes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'swagger')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBasePath($obj->{'basePath'})
         ,TopLevel::fromDefinitions($obj->{'definitions'})
@@ -592,6 +616,9 @@ class Definitions {
      * @throws Exception
      */
     public static function from(stdClass $obj): Definitions {
+        if (!property_exists($obj, 'Provider')) {
+            throw new Exception("Missing required property");
+        }
         return new Definitions(
          Definitions::fromProvider($obj->{'Provider'})
         );
@@ -705,6 +732,9 @@ class Provider {
      * @throws Exception
      */
     public static function from(stdClass $obj): Provider {
+        if (!property_exists($obj, 'properties')) {
+            throw new Exception("Missing required property");
+        }
         return new Provider(
          Provider::fromProperties($obj->{'properties'})
         );
@@ -856,6 +886,12 @@ class Property {
      * @throws Exception
      */
     public static function from(stdClass $obj): Property {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Property(
          Property::fromDescription($obj->{'description'})
         ,Property::fromType($obj->{'type'})
@@ -1105,6 +1141,15 @@ class Info {
      * @throws Exception
      */
     public static function from(stdClass $obj): Info {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'version')) {
+            throw new Exception("Missing required property");
+        }
         return new Info(
          Info::fromDescription($obj->{'description'})
         ,Info::fromTitle($obj->{'title'})
@@ -1208,6 +1253,9 @@ class Paths {
      * @throws Exception
      */
     public static function from(stdClass $obj): Paths {
+        if (!property_exists($obj, '/business_service_providers/search')) {
+            throw new Exception("Missing required property");
+        }
         return new Paths(
          Paths::fromBusinessServiceProvidersSearch($obj->{'/business_service_providers/search'})
         );
@@ -1307,6 +1355,9 @@ class BusinessServiceProvidersSearch {
      * @throws Exception
      */
     public static function from(stdClass $obj): BusinessServiceProvidersSearch {
+        if (!property_exists($obj, 'get')) {
+            throw new Exception("Missing required property");
+        }
         return new BusinessServiceProvidersSearch(
          BusinessServiceProvidersSearch::fromGet($obj->{'get'})
         );
@@ -1640,6 +1691,21 @@ class Get {
      * @throws Exception
      */
     public static function from(stdClass $obj): Get {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'parameters')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'responses')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'summary')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tags')) {
+            throw new Exception("Missing required property");
+        }
         return new Get(
          Get::fromDescription($obj->{'description'})
         ,Get::fromParameters($obj->{'parameters'})
@@ -2008,6 +2074,24 @@ class Parameter {
      * @throws Exception
      */
     public static function from(stdClass $obj): Parameter {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'format')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'in')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'required')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Parameter(
          Parameter::fromDescription($obj->{'description'})
         ,Parameter::fromFormat($obj->{'format'})
@@ -2117,6 +2201,9 @@ class Responses {
      * @throws Exception
      */
     public static function from(stdClass $obj): Responses {
+        if (!property_exists($obj, '200')) {
+            throw new Exception("Missing required property");
+        }
         return new Responses(
          Responses::fromThe200($obj->{'200'})
         );
@@ -2268,6 +2355,12 @@ class The200 {
      * @throws Exception
      */
     public static function from(stdClass $obj): The200 {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'schema')) {
+            throw new Exception("Missing required property");
+        }
         return new The200(
          The200::fromDescription($obj->{'description'})
         ,The200::fromSchema($obj->{'schema'})
@@ -2368,6 +2461,9 @@ class Schema {
      * @throws Exception
      */
     public static function from(stdClass $obj): Schema {
+        if (!property_exists($obj, '$ref')) {
+            throw new Exception("Missing required property");
+        }
         return new Schema(
          Schema::fromRef($obj->{'$ref'})
         );
diff --git a/base/php/test/inputs/json/misc/010b1.json/default/TopLevel.php b/head/php/test/inputs/json/misc/010b1.json/default/TopLevel.php
index 0dc389d..28c6e23 100644
--- a/base/php/test/inputs/json/misc/010b1.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/010b1.json/default/TopLevel.php
@@ -345,6 +345,24 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'age')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'females')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'males')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'year')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromAge($obj->{'age'})
         ,TopLevel::fromCountry($obj->{'country'})
diff --git a/base/php/test/inputs/json/misc/016af.json/default/TopLevel.php b/head/php/test/inputs/json/misc/016af.json/default/TopLevel.php
index 3d4f5c7..e92c16a 100644
--- a/base/php/test/inputs/json/misc/016af.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/016af.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'total_population')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromTotalPopulation($obj->{'total_population'})
         );
@@ -246,6 +249,12 @@ class TotalPopulation {
      * @throws Exception
      */
     public static function from(stdClass $obj): TotalPopulation {
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'population')) {
+            throw new Exception("Missing required property");
+        }
         return new TotalPopulation(
          TotalPopulation::fromDate($obj->{'date'})
         ,TotalPopulation::fromPopulation($obj->{'population'})
diff --git a/base/php/test/inputs/json/misc/033b1.json/default/TopLevel.php b/head/php/test/inputs/json/misc/033b1.json/default/TopLevel.php
index e448140..212c6e1 100644
--- a/base/php/test/inputs/json/misc/033b1.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/033b1.json/default/TopLevel.php
@@ -205,6 +205,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'base')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rates')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBase($obj->{'base'})
         ,TopLevel::fromDate($obj->{'date'})
diff --git a/base/php/test/inputs/json/misc/050b0.json/default/TopLevel.php b/head/php/test/inputs/json/misc/050b0.json/default/TopLevel.php
index c0d92b4..c6b7c46 100644
--- a/base/php/test/inputs/json/misc/050b0.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/050b0.json/default/TopLevel.php
@@ -518,6 +518,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'identifiers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'keywords')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'links')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'other_names')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'superseded_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromID($obj->{'id'})
         ,TopLevel::fromIdentifiers($obj->{'identifiers'})
@@ -683,6 +707,12 @@ class Identifier {
      * @throws Exception
      */
     public static function from(stdClass $obj): Identifier {
+        if (!property_exists($obj, 'identifier')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scheme')) {
+            throw new Exception("Missing required property");
+        }
         return new Identifier(
          Identifier::fromIdentifier($obj->{'identifier'})
         ,Identifier::fromScheme($obj->{'scheme'})
@@ -946,6 +976,12 @@ class Link {
      * @throws Exception
      */
     public static function from(stdClass $obj): Link {
+        if (!property_exists($obj, 'note')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Link(
          Link::fromNote($obj->{'note'})
         ,Link::fromURL($obj->{'url'})
@@ -1169,6 +1205,12 @@ class OtherName {
      * @throws Exception
      */
     public static function from(stdClass $obj): OtherName {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'note')) {
+            throw new Exception("Missing required property");
+        }
         return new OtherName(
          OtherName::fromName($obj->{'name'})
         ,OtherName::fromNote($obj->{'note'})
@@ -1375,6 +1417,15 @@ class Text {
      * @throws Exception
      */
     public static function from(stdClass $obj): Text {
+        if (!property_exists($obj, 'media_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Text(
          Text::fromMediaType($obj->{'media_type'})
         ,Text::fromTitle($obj->{'title'})
diff --git a/base/php/test/inputs/json/misc/06bee.json/default/TopLevel.php b/head/php/test/inputs/json/misc/06bee.json/default/TopLevel.php
index 930eef8..fb8d73a 100644
--- a/base/php/test/inputs/json/misc/06bee.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/06bee.json/default/TopLevel.php
@@ -510,6 +510,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'identifiers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'keywords')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'links')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'other_names')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'superseded_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromID($obj->{'id'})
         ,TopLevel::fromIdentifiers($obj->{'identifiers'})
@@ -675,6 +699,12 @@ class Identifier {
      * @throws Exception
      */
     public static function from(stdClass $obj): Identifier {
+        if (!property_exists($obj, 'identifier')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scheme')) {
+            throw new Exception("Missing required property");
+        }
         return new Identifier(
          Identifier::fromIdentifier($obj->{'identifier'})
         ,Identifier::fromScheme($obj->{'scheme'})
@@ -934,6 +964,12 @@ class Link {
      * @throws Exception
      */
     public static function from(stdClass $obj): Link {
+        if (!property_exists($obj, 'note')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Link(
          Link::fromNote($obj->{'note'})
         ,Link::fromURL($obj->{'url'})
@@ -1185,6 +1221,15 @@ class Text {
      * @throws Exception
      */
     public static function from(stdClass $obj): Text {
+        if (!property_exists($obj, 'media_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Text(
          Text::fromMediaType($obj->{'media_type'})
         ,Text::fromTitle($obj->{'title'})
diff --git a/base/php/test/inputs/json/misc/07540.json/default/TopLevel.php b/head/php/test/inputs/json/misc/07540.json/default/TopLevel.php
index 90f0883..8493b70 100644
--- a/base/php/test/inputs/json/misc/07540.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/07540.json/default/TopLevel.php
@@ -85,6 +85,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'cookies')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCookies($obj->{'cookies'})
         );
diff --git a/base/php/test/inputs/json/misc/0779f.json/default/TopLevel.php b/head/php/test/inputs/json/misc/0779f.json/default/TopLevel.php
index 3a8b02e..d1cdcf2 100644
--- a/base/php/test/inputs/json/misc/0779f.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/0779f.json/default/TopLevel.php
@@ -450,6 +450,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'delay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'IATA')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ICAO')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCity($obj->{'city'})
         ,TopLevel::fromDelay($obj->{'delay'})
@@ -978,6 +1002,33 @@ class Status {
      * @throws Exception
      */
     public static function from(stdClass $obj): Status {
+        if (!property_exists($obj, 'avgDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureBegin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureEnd')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'endTime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'maxDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Status(
          Status::fromAvgDelay($obj->{'avgDelay'})
         ,Status::fromClosureBegin($obj->{'closureBegin'})
@@ -1301,6 +1352,21 @@ class Weather {
      * @throws Exception
      */
     public static function from(stdClass $obj): Weather {
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Weather(
          Weather::fromMeta($obj->{'meta'})
         ,Weather::fromTemp($obj->{'temp'})
@@ -1511,6 +1577,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'credit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromCredit($obj->{'credit'})
         ,Meta::fromUpdated($obj->{'updated'})
diff --git a/base/php/test/inputs/json/misc/07c75.json/default/TopLevel.php b/head/php/test/inputs/json/misc/07c75.json/default/TopLevel.php
index 746b982..2feb293 100644
--- a/base/php/test/inputs/json/misc/07c75.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/07c75.json/default/TopLevel.php
@@ -512,6 +512,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'identifiers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'keywords')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'links')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'other_names')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'superseded_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromID($obj->{'id'})
         ,TopLevel::fromIdentifiers($obj->{'identifiers'})
@@ -676,6 +700,12 @@ class Identifier {
      * @throws Exception
      */
     public static function from(stdClass $obj): Identifier {
+        if (!property_exists($obj, 'identifier')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scheme')) {
+            throw new Exception("Missing required property");
+        }
         return new Identifier(
          Identifier::fromIdentifier($obj->{'identifier'})
         ,Identifier::fromScheme($obj->{'scheme'})
@@ -828,6 +858,12 @@ class Link {
      * @throws Exception
      */
     public static function from(stdClass $obj): Link {
+        if (!property_exists($obj, 'note')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Link(
          Link::fromNote($obj->{'note'})
         ,Link::fromURL($obj->{'url'})
@@ -1032,6 +1068,15 @@ class Text {
      * @throws Exception
      */
     public static function from(stdClass $obj): Text {
+        if (!property_exists($obj, 'media_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Text(
          Text::fromMediaType($obj->{'media_type'})
         ,Text::fromTitle($obj->{'title'})
diff --git a/base/php/test/inputs/json/misc/09f54.json/default/TopLevel.php b/head/php/test/inputs/json/misc/09f54.json/default/TopLevel.php
index bf3c1bc..5e950d6 100644
--- a/base/php/test/inputs/json/misc/09f54.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/09f54.json/default/TopLevel.php
@@ -152,6 +152,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromDescription($obj->{'description'})
@@ -304,6 +310,12 @@ class Datum {
      * @throws Exception
      */
     public static function from(stdClass $obj): Datum {
+        if (!property_exists($obj, 'anomaly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'value')) {
+            throw new Exception("Missing required property");
+        }
         return new Datum(
          Datum::fromAnomaly($obj->{'anomaly'})
         ,Datum::fromValue($obj->{'value'})
@@ -560,6 +572,18 @@ class Description {
      * @throws Exception
      */
     public static function from(stdClass $obj): Description {
+        if (!property_exists($obj, 'base_period')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'missing')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'units')) {
+            throw new Exception("Missing required property");
+        }
         return new Description(
          Description::fromBasePeriod($obj->{'base_period'})
         ,Description::fromMissing($obj->{'missing'})
diff --git a/base/php/test/inputs/json/misc/0a358.json/default/TopLevel.php b/head/php/test/inputs/json/misc/0a358.json/default/TopLevel.php
index 135f4fe..d202a99 100644
--- a/base/php/test/inputs/json/misc/0a358.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/0a358.json/default/TopLevel.php
@@ -409,6 +409,27 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'facets')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'limit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'next')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'offset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'previous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCount($obj->{'count'})
         ,TopLevel::fromFacets($obj->{'facets'})
@@ -838,6 +859,24 @@ class Result {
      * @throws Exception
      */
     public static function from(stdClass $obj): Result {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uri')) {
+            throw new Exception("Missing required property");
+        }
         return new Result(
          Result::fromCode($obj->{'code'})
         ,Result::fromCreatedAt($obj->{'created_at'})
diff --git a/base/php/test/inputs/json/misc/0a91a.json/default/TopLevel.php b/head/php/test/inputs/json/misc/0a91a.json/default/TopLevel.php
index dac5866..d666e62 100644
--- a/base/php/test/inputs/json/misc/0a91a.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/0a91a.json/default/TopLevel.php
@@ -470,6 +470,27 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'actor')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'payload')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'public')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'repo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromActor($obj->{'actor'})
         ,TopLevel::fromCreatedAt($obj->{'created_at'})
@@ -852,6 +873,21 @@ class Actor {
      * @throws Exception
      */
     public static function from(stdClass $obj): Actor {
+        if (!property_exists($obj, 'avatar_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gravatar_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'login')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Actor(
          Actor::fromAvatarURL($obj->{'avatar_url'})
         ,Actor::fromDisplayLogin($obj->{'display_login'})
@@ -2122,6 +2158,21 @@ class Commit {
      * @throws Exception
      */
     public static function from(stdClass $obj): Commit {
+        if (!property_exists($obj, 'author')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'distinct')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'message')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sha')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Commit(
          Commit::fromAuthor($obj->{'author'})
         ,Commit::fromDistinct($obj->{'distinct'})
@@ -2280,6 +2331,12 @@ class Author {
      * @throws Exception
      */
     public static function from(stdClass $obj): Author {
+        if (!property_exists($obj, 'email')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new Author(
          Author::fromEmail($obj->{'email'})
         ,Author::fromName($obj->{'name'})
@@ -4527,6 +4584,129 @@ class PullRequest {
      * @throws Exception
      */
     public static function from(stdClass $obj): PullRequest {
+        if (!property_exists($obj, 'additions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'assignee')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'assignees')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'base')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'body')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'changed_files')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closed_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'comments_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'commits')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'commits_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'deletions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'diff_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'head')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'html_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'issue_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '_links')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'maintainer_can_modify')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'merge_commit_sha')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mergeable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mergeable_state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'merged')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'merged_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'merged_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'milestone')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'number')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'patch_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rebaseable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'requested_reviewers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'review_comment_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'review_comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'review_comments_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'statuses_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'user')) {
+            throw new Exception("Missing required property");
+        }
         return new PullRequest(
          PullRequest::fromAdditions($obj->{'additions'})
         ,PullRequest::fromAssignee($obj->{'assignee'})
@@ -4915,6 +5095,21 @@ class Base {
      * @throws Exception
      */
     public static function from(stdClass $obj): Base {
+        if (!property_exists($obj, 'label')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ref')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'repo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sha')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'user')) {
+            throw new Exception("Missing required property");
+        }
         return new Base(
          Base::fromLabel($obj->{'label'})
         ,Base::fromRef($obj->{'ref'})
@@ -8588,6 +8783,213 @@ class BaseRepo {
      * @throws Exception
      */
     public static function from(stdClass $obj): BaseRepo {
+        if (!property_exists($obj, 'archive_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'assignees_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'blobs_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'branches_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'clone_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'collaborators_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'comments_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'commits_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'compare_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'contents_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'contributors_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'default_branch')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'deployments_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downloads_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'events_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fork')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forks')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forks_count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forks_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'full_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'git_commits_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'git_refs_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'git_tags_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'git_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'has_downloads')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'has_issues')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'has_pages')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'has_projects')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'has_wiki')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'homepage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hooks_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'html_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'issue_comment_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'issue_events_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'issues_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'keys_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'labels_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'language')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'languages_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'merges_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'milestones_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mirror_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'notifications_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'open_issues')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'open_issues_count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'owner')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'private')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pulls_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pushed_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'releases_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ssh_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stargazers_count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stargazers_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'statuses_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subscribers_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subscription_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'svn_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tags_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'teams_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trees_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'watchers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'watchers_count')) {
+            throw new Exception("Missing required property");
+        }
         return new BaseRepo(
          BaseRepo::fromArchiveURL($obj->{'archive_url'})
         ,BaseRepo::fromAssigneesURL($obj->{'assignees_url'})
@@ -9654,6 +10056,57 @@ class MergedBy {
      * @throws Exception
      */
     public static function from(stdClass $obj): MergedBy {
+        if (!property_exists($obj, 'avatar_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'events_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'followers_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'following_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gists_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gravatar_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'html_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'login')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'organizations_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'received_events_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'repos_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'site_admin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'starred_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subscriptions_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new MergedBy(
          MergedBy::fromAvatarURL($obj->{'avatar_url'})
         ,MergedBy::fromEventsURL($obj->{'events_url'})
@@ -10156,6 +10609,30 @@ class Links {
      * @throws Exception
      */
     public static function from(stdClass $obj): Links {
+        if (!property_exists($obj, 'comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'commits')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'html')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'issue')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'review_comment')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'review_comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'self')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'statuses')) {
+            throw new Exception("Missing required property");
+        }
         return new Links(
          Links::fromComments($obj->{'comments'})
         ,Links::fromCommits($obj->{'commits'})
@@ -10268,6 +10745,9 @@ class Comments {
      * @throws Exception
      */
     public static function from(stdClass $obj): Comments {
+        if (!property_exists($obj, 'href')) {
+            throw new Exception("Missing required property");
+        }
         return new Comments(
          Comments::fromHref($obj->{'href'})
         );
@@ -10470,6 +10950,15 @@ class TopLevelRepo {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevelRepo {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevelRepo(
          TopLevelRepo::fromID($obj->{'id'})
         ,TopLevelRepo::fromName($obj->{'name'})
diff --git a/base/php/test/inputs/json/misc/0b91a.json/default/TopLevel.php b/head/php/test/inputs/json/misc/0b91a.json/default/TopLevel.php
index d8c0590..e2cae80 100644
--- a/base/php/test/inputs/json/misc/0b91a.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/0b91a.json/default/TopLevel.php
@@ -149,6 +149,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'metadata')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromMetadata($obj->{'metadata'})
         ,TopLevel::fromResults($obj->{'results'})
@@ -355,6 +361,15 @@ class Metadata {
      * @throws Exception
      */
     public static function from(stdClass $obj): Metadata {
+        if (!property_exists($obj, 'executionTime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'responseInfo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'resultset')) {
+            throw new Exception("Missing required property");
+        }
         return new Metadata(
          Metadata::fromExecutionTime($obj->{'executionTime'})
         ,Metadata::fromResponseInfo($obj->{'responseInfo'})
@@ -509,6 +524,12 @@ class ResponseInfo {
      * @throws Exception
      */
     public static function from(stdClass $obj): ResponseInfo {
+        if (!property_exists($obj, 'developerMessage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
         return new ResponseInfo(
          ResponseInfo::fromDeveloperMessage($obj->{'developerMessage'})
         ,ResponseInfo::fromStatus($obj->{'status'})
@@ -713,6 +734,15 @@ class Resultset {
      * @throws Exception
      */
     public static function from(stdClass $obj): Resultset {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'page')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pagesize')) {
+            throw new Exception("Missing required property");
+        }
         return new Resultset(
          Resultset::fromCount($obj->{'count'})
         ,Resultset::fromPage($obj->{'page'})
@@ -1548,6 +1578,48 @@ class Result {
      * @throws Exception
      */
     public static function from(stdClass $obj): Result {
+        if (!property_exists($obj, 'attachment')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'body')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'changed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'component')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'image')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'number')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'teaser')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'topic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uuid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'vuuid')) {
+            throw new Exception("Missing required property");
+        }
         return new Result(
          Result::fromAttachment($obj->{'attachment'})
         ,Result::fromBody($obj->{'body'})
@@ -1727,6 +1799,12 @@ class Component {
      * @throws Exception
      */
     public static function from(stdClass $obj): Component {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uuid')) {
+            throw new Exception("Missing required property");
+        }
         return new Component(
          Component::fromName($obj->{'name'})
         ,Component::fromUUID($obj->{'uuid'})
diff --git a/base/php/test/inputs/json/misc/0cffa.json/default/TopLevel.php b/head/php/test/inputs/json/misc/0cffa.json/default/TopLevel.php
index 1e908f6..660d1ed 100644
--- a/base/php/test/inputs/json/misc/0cffa.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/0cffa.json/default/TopLevel.php
@@ -202,6 +202,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pagination')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromMeta($obj->{'meta'})
@@ -1203,6 +1212,57 @@ class Datum {
      * @throws Exception
      */
     public static function from(stdClass $obj): Datum {
+        if (!property_exists($obj, 'bitly_gif_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bitly_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'content_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'embed_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'images')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'import_datetime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_indexable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rating')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'slug')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source_post_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source_tld')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trending_datetime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'username')) {
+            throw new Exception("Missing required property");
+        }
         return new Datum(
          Datum::fromBitlyGIFURL($obj->{'bitly_gif_url'})
         ,Datum::fromBitlyURL($obj->{'bitly_url'})
@@ -2512,6 +2572,72 @@ class Images {
      * @throws Exception
      */
     public static function from(stdClass $obj): Images {
+        if (!property_exists($obj, 'downsized')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_large')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_medium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_downsampled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_small_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_downsampled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_small_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'looping')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original_mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview_gif')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview_webp')) {
+            throw new Exception("Missing required property");
+        }
         return new Images(
          Images::fromDownsized($obj->{'downsized'})
         ,Images::fromDownsizedLarge($obj->{'downsized_large'})
@@ -2820,6 +2946,15 @@ class Downsized {
      * @throws Exception
      */
     public static function from(stdClass $obj): Downsized {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Downsized(
          Downsized::fromHeight($obj->{'height'})
         ,Downsized::fromSize($obj->{'size'})
@@ -3080,6 +3215,18 @@ class DownsizedSmall {
      * @throws Exception
      */
     public static function from(stdClass $obj): DownsizedSmall {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4_size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new DownsizedSmall(
          DownsizedSmall::fromHeight($obj->{'height'})
         ,DownsizedSmall::fromMp4($obj->{'mp4'})
@@ -3692,6 +3839,24 @@ class FixedHeight {
      * @throws Exception
      */
     public static function from(stdClass $obj): FixedHeight {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'webp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'webp_size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new FixedHeight(
          FixedHeight::fromFrames($obj->{'frames'})
         ,FixedHeight::fromHash($obj->{'hash'})
@@ -3860,6 +4025,12 @@ class Looping {
      * @throws Exception
      */
     public static function from(stdClass $obj): Looping {
+        if (!property_exists($obj, 'mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4_size')) {
+            throw new Exception("Missing required property");
+        }
         return new Looping(
          Looping::fromMp4($obj->{'mp4'})
         ,Looping::fromMp4Size($obj->{'mp4_size'})
@@ -4315,6 +4486,24 @@ class User {
      * @throws Exception
      */
     public static function from(stdClass $obj): User {
+        if (!property_exists($obj, 'avatar_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banner_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'display_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profile_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'twitter')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'username')) {
+            throw new Exception("Missing required property");
+        }
         return new User(
          User::fromAvatarURL($obj->{'avatar_url'})
         ,User::fromBannerURL($obj->{'banner_url'})
@@ -4584,6 +4773,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'msg')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'response_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromMsg($obj->{'msg'})
         ,Meta::fromResponseID($obj->{'response_id'})
@@ -4790,6 +4988,15 @@ class Pagination {
      * @throws Exception
      */
     public static function from(stdClass $obj): Pagination {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'offset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total_count')) {
+            throw new Exception("Missing required property");
+        }
         return new Pagination(
          Pagination::fromCount($obj->{'count'})
         ,Pagination::fromOffset($obj->{'offset'})
diff --git a/base/php/test/inputs/json/misc/0e0c2.json/default/TopLevel.php b/head/php/test/inputs/json/misc/0e0c2.json/default/TopLevel.php
index 8598f73..b0719b7 100644
--- a/base/php/test/inputs/json/misc/0e0c2.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/0e0c2.json/default/TopLevel.php
@@ -255,6 +255,18 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'next')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'previous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCount($obj->{'count'})
         ,TopLevel::fromNext($obj->{'next'})
@@ -1159,6 +1171,51 @@ class Result {
      * @throws Exception
      */
     public static function from(stdClass $obj): Result {
+        if (!property_exists($obj, 'active_screens')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'collections')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'details')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'duration')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fav_movie')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'images')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'language')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'release_date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stars')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'videos')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'vote_score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'watches')) {
+            throw new Exception("Missing required property");
+        }
         return new Result(
          Result::fromActiveScreens($obj->{'active_screens'})
         ,Result::fromCollections($obj->{'collections'})
@@ -1455,6 +1512,18 @@ class Collection {
      * @throws Exception
      */
     public static function from(stdClass $obj): Collection {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'movies')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'slug')) {
+            throw new Exception("Missing required property");
+        }
         return new Collection(
          Collection::fromID($obj->{'id'})
         ,Collection::fromMovies($obj->{'movies'})
@@ -1872,6 +1941,27 @@ class Detail {
      * @throws Exception
      */
     public static function from(stdClass $obj): Detail {
+        if (!property_exists($obj, 'cast')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'director')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'language')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'storyline')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tagline')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
         return new Detail(
          Detail::fromCast($obj->{'cast'})
         ,Detail::fromDirector($obj->{'director'})
@@ -2135,6 +2225,15 @@ class FavMovie {
      * @throws Exception
      */
     public static function from(stdClass $obj): FavMovie {
+        if (!property_exists($obj, 'follow')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'star')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'watched')) {
+            throw new Exception("Missing required property");
+        }
         return new FavMovie(
          FavMovie::fromFollow($obj->{'follow'})
         ,FavMovie::fromStar($obj->{'star'})
@@ -2446,6 +2545,21 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'favs')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromFavs($obj->{'favs'})
         ,Image::fromID($obj->{'id'})
@@ -2807,6 +2921,18 @@ class Video {
      * @throws Exception
      */
     public static function from(stdClass $obj): Video {
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'language')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Video(
          Video::fromKind($obj->{'kind'})
         ,Video::fromLanguage($obj->{'language'})
@@ -3015,6 +3141,15 @@ class VoteScore {
      * @throws Exception
      */
     public static function from(stdClass $obj): VoteScore {
+        if (!property_exists($obj, 'avg')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total')) {
+            throw new Exception("Missing required property");
+        }
         return new VoteScore(
          VoteScore::fromAvg($obj->{'avg'})
         ,VoteScore::fromScore($obj->{'score'})
diff --git a/base/php/test/inputs/json/misc/0fecf.json/default/TopLevel.php b/head/php/test/inputs/json/misc/0fecf.json/default/TopLevel.php
index d75c65e..68585c6 100644
--- a/base/php/test/inputs/json/misc/0fecf.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/0fecf.json/default/TopLevel.php
@@ -98,6 +98,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'countries')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCountries($obj->{'countries'})
         );
diff --git a/base/php/test/inputs/json/misc/10be4.json/default/TopLevel.php b/head/php/test/inputs/json/misc/10be4.json/default/TopLevel.php
index b404894..a64b62a 100644
--- a/base/php/test/inputs/json/misc/10be4.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/10be4.json/default/TopLevel.php
@@ -518,6 +518,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'identifiers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'keywords')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'links')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'other_names')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'superseded_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromID($obj->{'id'})
         ,TopLevel::fromIdentifiers($obj->{'identifiers'})
@@ -683,6 +707,12 @@ class Identifier {
      * @throws Exception
      */
     public static function from(stdClass $obj): Identifier {
+        if (!property_exists($obj, 'identifier')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scheme')) {
+            throw new Exception("Missing required property");
+        }
         return new Identifier(
          Identifier::fromIdentifier($obj->{'identifier'})
         ,Identifier::fromScheme($obj->{'scheme'})
@@ -978,6 +1008,12 @@ class Link {
      * @throws Exception
      */
     public static function from(stdClass $obj): Link {
+        if (!property_exists($obj, 'note')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Link(
          Link::fromNote($obj->{'note'})
         ,Link::fromURL($obj->{'url'})
@@ -1205,6 +1241,12 @@ class OtherName {
      * @throws Exception
      */
     public static function from(stdClass $obj): OtherName {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'note')) {
+            throw new Exception("Missing required property");
+        }
         return new OtherName(
          OtherName::fromName($obj->{'name'})
         ,OtherName::fromNote($obj->{'note'})
@@ -1411,6 +1453,15 @@ class Text {
      * @throws Exception
      */
     public static function from(stdClass $obj): Text {
+        if (!property_exists($obj, 'media_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Text(
          Text::fromMediaType($obj->{'media_type'})
         ,Text::fromTitle($obj->{'title'})
diff --git a/base/php/test/inputs/json/misc/112b5.json/default/TopLevel.php b/head/php/test/inputs/json/misc/112b5.json/default/TopLevel.php
index 5348b6c..ac6abe4 100644
--- a/base/php/test/inputs/json/misc/112b5.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/112b5.json/default/TopLevel.php
@@ -242,6 +242,18 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'args')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'headers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'origin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromArgs($obj->{'args'})
         ,TopLevel::fromHeaders($obj->{'headers'})
@@ -547,6 +559,18 @@ class Headers {
      * @throws Exception
      */
     public static function from(stdClass $obj): Headers {
+        if (!property_exists($obj, 'Accept-Encoding')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Connection')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Host')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'User-Agent')) {
+            throw new Exception("Missing required property");
+        }
         return new Headers(
          Headers::fromAcceptEncoding($obj->{'Accept-Encoding'})
         ,Headers::fromConnection($obj->{'Connection'})
diff --git a/base/php/test/inputs/json/misc/127a1.json/default/TopLevel.php b/head/php/test/inputs/json/misc/127a1.json/default/TopLevel.php
index ae1290c..636960a 100644
--- a/base/php/test/inputs/json/misc/127a1.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/127a1.json/default/TopLevel.php
@@ -202,6 +202,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pagination')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromMeta($obj->{'meta'})
@@ -1203,6 +1212,57 @@ class Datum {
      * @throws Exception
      */
     public static function from(stdClass $obj): Datum {
+        if (!property_exists($obj, 'bitly_gif_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bitly_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'content_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'embed_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'images')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'import_datetime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_indexable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rating')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'slug')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source_post_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source_tld')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trending_datetime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'username')) {
+            throw new Exception("Missing required property");
+        }
         return new Datum(
          Datum::fromBitlyGIFURL($obj->{'bitly_gif_url'})
         ,Datum::fromBitlyURL($obj->{'bitly_url'})
@@ -2512,6 +2572,72 @@ class Images {
      * @throws Exception
      */
     public static function from(stdClass $obj): Images {
+        if (!property_exists($obj, 'downsized')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_large')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_medium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_downsampled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_small_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_downsampled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_small_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'looping')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original_mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview_gif')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview_webp')) {
+            throw new Exception("Missing required property");
+        }
         return new Images(
          Images::fromDownsized($obj->{'downsized'})
         ,Images::fromDownsizedLarge($obj->{'downsized_large'})
@@ -2820,6 +2946,15 @@ class Downsized {
      * @throws Exception
      */
     public static function from(stdClass $obj): Downsized {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Downsized(
          Downsized::fromHeight($obj->{'height'})
         ,Downsized::fromSize($obj->{'size'})
@@ -3080,6 +3215,18 @@ class DownsizedSmall {
      * @throws Exception
      */
     public static function from(stdClass $obj): DownsizedSmall {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4_size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new DownsizedSmall(
          DownsizedSmall::fromHeight($obj->{'height'})
         ,DownsizedSmall::fromMp4($obj->{'mp4'})
@@ -3692,6 +3839,24 @@ class FixedHeight {
      * @throws Exception
      */
     public static function from(stdClass $obj): FixedHeight {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'webp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'webp_size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new FixedHeight(
          FixedHeight::fromFrames($obj->{'frames'})
         ,FixedHeight::fromHash($obj->{'hash'})
@@ -3860,6 +4025,12 @@ class Looping {
      * @throws Exception
      */
     public static function from(stdClass $obj): Looping {
+        if (!property_exists($obj, 'mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4_size')) {
+            throw new Exception("Missing required property");
+        }
         return new Looping(
          Looping::fromMp4($obj->{'mp4'})
         ,Looping::fromMp4Size($obj->{'mp4_size'})
@@ -4321,6 +4492,21 @@ class User {
      * @throws Exception
      */
     public static function from(stdClass $obj): User {
+        if (!property_exists($obj, 'avatar_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banner_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'display_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profile_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'username')) {
+            throw new Exception("Missing required property");
+        }
         return new User(
          User::fromAvatarURL($obj->{'avatar_url'})
         ,User::fromBannerURL($obj->{'banner_url'})
@@ -4590,6 +4776,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'msg')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'response_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromMsg($obj->{'msg'})
         ,Meta::fromResponseID($obj->{'response_id'})
@@ -4796,6 +4991,15 @@ class Pagination {
      * @throws Exception
      */
     public static function from(stdClass $obj): Pagination {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'offset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total_count')) {
+            throw new Exception("Missing required property");
+        }
         return new Pagination(
          Pagination::fromCount($obj->{'count'})
         ,Pagination::fromOffset($obj->{'offset'})
diff --git a/base/php/test/inputs/json/misc/13d8d.json/default/TopLevel.php b/head/php/test/inputs/json/misc/13d8d.json/default/TopLevel.php
index a4db294..e00b836 100644
--- a/base/php/test/inputs/json/misc/13d8d.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/13d8d.json/default/TopLevel.php
@@ -502,6 +502,33 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'category')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'context')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'location')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'location_subtype')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'location_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'month')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'outcome_status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'persistent_id')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCategory($obj->{'category'})
         ,TopLevel::fromContext($obj->{'context'})
@@ -721,6 +748,15 @@ class Location {
      * @throws Exception
      */
     public static function from(stdClass $obj): Location {
+        if (!property_exists($obj, 'latitude')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'longitude')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'street')) {
+            throw new Exception("Missing required property");
+        }
         return new Location(
          Location::fromLatitude($obj->{'latitude'})
         ,Location::fromLongitude($obj->{'longitude'})
@@ -875,6 +911,12 @@ class Street {
      * @throws Exception
      */
     public static function from(stdClass $obj): Street {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new Street(
          Street::fromID($obj->{'id'})
         ,Street::fromName($obj->{'name'})
@@ -1027,6 +1069,12 @@ class OutcomeStatus {
      * @throws Exception
      */
     public static function from(stdClass $obj): OutcomeStatus {
+        if (!property_exists($obj, 'category')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
         return new OutcomeStatus(
          OutcomeStatus::fromCategory($obj->{'category'})
         ,OutcomeStatus::fromDate($obj->{'date'})
diff --git a/base/php/test/inputs/json/misc/14d38.json/default/TopLevel.php b/head/php/test/inputs/json/misc/14d38.json/default/TopLevel.php
index 2dc6c7b..6cf7c3f 100644
--- a/base/php/test/inputs/json/misc/14d38.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/14d38.json/default/TopLevel.php
@@ -85,6 +85,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'headers')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromHeaders($obj->{'headers'})
         );
@@ -339,6 +342,18 @@ class Headers {
      * @throws Exception
      */
     public static function from(stdClass $obj): Headers {
+        if (!property_exists($obj, 'Accept-Encoding')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Connection')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Host')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'User-Agent')) {
+            throw new Exception("Missing required property");
+        }
         return new Headers(
          Headers::fromAcceptEncoding($obj->{'Accept-Encoding'})
         ,Headers::fromConnection($obj->{'Connection'})
diff --git a/base/php/test/inputs/json/misc/167d6.json/default/TopLevel.php b/head/php/test/inputs/json/misc/167d6.json/default/TopLevel.php
index e448140..212c6e1 100644
--- a/base/php/test/inputs/json/misc/167d6.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/167d6.json/default/TopLevel.php
@@ -205,6 +205,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'base')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rates')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBase($obj->{'base'})
         ,TopLevel::fromDate($obj->{'date'})
diff --git a/base/php/test/inputs/json/misc/16bc5.json/default/TopLevel.php b/head/php/test/inputs/json/misc/16bc5.json/default/TopLevel.php
index 94c8a8d..51996fe 100644
--- a/base/php/test/inputs/json/misc/16bc5.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/16bc5.json/default/TopLevel.php
@@ -85,6 +85,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'query')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromQuery($obj->{'query'})
         );
@@ -347,6 +350,18 @@ class Query {
      * @throws Exception
      */
     public static function from(stdClass $obj): Query {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lang')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new Query(
          Query::fromCount($obj->{'count'})
         ,Query::fromCreated($obj->{'created'})
@@ -452,6 +467,9 @@ class Results {
      * @throws Exception
      */
     public static function from(stdClass $obj): Results {
+        if (!property_exists($obj, 'channel')) {
+            throw new Exception("Missing required property");
+        }
         return new Results(
          Results::fromChannel($obj->{'channel'})
         );
@@ -1181,6 +1199,45 @@ class Channel {
      * @throws Exception
      */
     public static function from(stdClass $obj): Channel {
+        if (!property_exists($obj, 'astronomy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'atmosphere')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'image')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'language')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lastBuildDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'location')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ttl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'units')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Channel(
          Channel::fromAstronomy($obj->{'astronomy'})
         ,Channel::fromAtmosphere($obj->{'atmosphere'})
@@ -1355,6 +1412,12 @@ class Astronomy {
      * @throws Exception
      */
     public static function from(stdClass $obj): Astronomy {
+        if (!property_exists($obj, 'sunrise')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sunset')) {
+            throw new Exception("Missing required property");
+        }
         return new Astronomy(
          Astronomy::fromSunrise($obj->{'sunrise'})
         ,Astronomy::fromSunset($obj->{'sunset'})
@@ -1611,6 +1674,18 @@ class Atmosphere {
      * @throws Exception
      */
     public static function from(stdClass $obj): Atmosphere {
+        if (!property_exists($obj, 'humidity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rising')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
         return new Atmosphere(
          Atmosphere::fromHumidity($obj->{'humidity'})
         ,Atmosphere::fromPressure($obj->{'pressure'})
@@ -1923,6 +1998,21 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromHeight($obj->{'height'})
         ,Image::fromLink($obj->{'link'})
@@ -2459,6 +2549,33 @@ class Item {
      * @throws Exception
      */
     public static function from(stdClass $obj): Item {
+        if (!property_exists($obj, 'condition')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forecast')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'guid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'long')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pubDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
         return new Item(
          Item::fromCondition($obj->{'condition'})
         ,Item::fromDescription($obj->{'description'})
@@ -2729,6 +2846,18 @@ class Condition {
      * @throws Exception
      */
     public static function from(stdClass $obj): Condition {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Condition(
          Condition::fromCode($obj->{'code'})
         ,Condition::fromDate($obj->{'date'})
@@ -3093,6 +3222,24 @@ class Forecast {
      * @throws Exception
      */
     public static function from(stdClass $obj): Forecast {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'day')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'high')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'low')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Forecast(
          Forecast::fromCode($obj->{'code'})
         ,Forecast::fromDate($obj->{'date'})
@@ -3201,6 +3348,9 @@ class GUID {
      * @throws Exception
      */
     public static function from(stdClass $obj): GUID {
+        if (!property_exists($obj, 'isPermaLink')) {
+            throw new Exception("Missing required property");
+        }
         return new GUID(
          GUID::fromIsPermaLink($obj->{'isPermaLink'})
         );
@@ -3403,6 +3553,15 @@ class Location {
      * @throws Exception
      */
     public static function from(stdClass $obj): Location {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'region')) {
+            throw new Exception("Missing required property");
+        }
         return new Location(
          Location::fromCity($obj->{'city'})
         ,Location::fromCountry($obj->{'country'})
@@ -3661,6 +3820,18 @@ class Units {
      * @throws Exception
      */
     public static function from(stdClass $obj): Units {
+        if (!property_exists($obj, 'distance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temperature')) {
+            throw new Exception("Missing required property");
+        }
         return new Units(
          Units::fromDistance($obj->{'distance'})
         ,Units::fromPressure($obj->{'pressure'})
@@ -3869,6 +4040,15 @@ class Wind {
      * @throws Exception
      */
     public static function from(stdClass $obj): Wind {
+        if (!property_exists($obj, 'chill')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'direction')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
         return new Wind(
          Wind::fromChill($obj->{'chill'})
         ,Wind::fromDirection($obj->{'direction'})
diff --git a/base/php/test/inputs/json/misc/176f1.json/default/TopLevel.php b/head/php/test/inputs/json/misc/176f1.json/default/TopLevel.php
index 8b1467d..3a0b6e2 100644
--- a/base/php/test/inputs/json/misc/176f1.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/176f1.json/default/TopLevel.php
@@ -252,6 +252,18 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'message')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'responseTime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Results')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromMessage($obj->{'message'})
         ,TopLevel::fromResponseTime($obj->{'responseTime'})
@@ -368,6 +380,9 @@ class Results {
      * @throws Exception
      */
     public static function from(stdClass $obj): Results {
+        if (!property_exists($obj, 'series')) {
+            throw new Exception("Missing required property");
+        }
         return new Results(
          Results::fromSeries($obj->{'series'})
         );
@@ -530,6 +545,12 @@ class Series {
      * @throws Exception
      */
     public static function from(stdClass $obj): Series {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'seriesID')) {
+            throw new Exception("Missing required property");
+        }
         return new Series(
          Series::fromData($obj->{'data'})
         ,Series::fromSeriesID($obj->{'seriesID'})
@@ -850,6 +871,21 @@ class Datum {
      * @throws Exception
      */
     public static function from(stdClass $obj): Datum {
+        if (!property_exists($obj, 'footnotes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'period')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'periodName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'value')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'year')) {
+            throw new Exception("Missing required property");
+        }
         return new Datum(
          Datum::fromFootnotes($obj->{'footnotes'})
         ,Datum::fromPeriod($obj->{'period'})
diff --git a/base/php/test/inputs/json/misc/1a7f5.json/default/TopLevel.php b/head/php/test/inputs/json/misc/1a7f5.json/default/TopLevel.php
index 0dc389d..28c6e23 100644
--- a/base/php/test/inputs/json/misc/1a7f5.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/1a7f5.json/default/TopLevel.php
@@ -345,6 +345,24 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'age')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'females')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'males')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'year')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromAge($obj->{'age'})
         ,TopLevel::fromCountry($obj->{'country'})
diff --git a/base/php/test/inputs/json/misc/1b28c.json/default/TopLevel.php b/head/php/test/inputs/json/misc/1b28c.json/default/TopLevel.php
index 3d4f5c7..e92c16a 100644
--- a/base/php/test/inputs/json/misc/1b28c.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/1b28c.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'total_population')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromTotalPopulation($obj->{'total_population'})
         );
@@ -246,6 +249,12 @@ class TotalPopulation {
      * @throws Exception
      */
     public static function from(stdClass $obj): TotalPopulation {
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'population')) {
+            throw new Exception("Missing required property");
+        }
         return new TotalPopulation(
          TotalPopulation::fromDate($obj->{'date'})
         ,TotalPopulation::fromPopulation($obj->{'population'})
diff --git a/base/php/test/inputs/json/misc/1b409.json/default/TopLevel.php b/head/php/test/inputs/json/misc/1b409.json/default/TopLevel.php
index 0241bb4..9eb818f 100644
--- a/base/php/test/inputs/json/misc/1b409.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/1b409.json/default/TopLevel.php
@@ -149,6 +149,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'objects')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromMeta($obj->{'meta'})
         ,TopLevel::fromObjects($obj->{'objects'})
@@ -353,6 +359,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'limit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'offset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total_count')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromLimit($obj->{'limit'})
         ,Meta::fromOffset($obj->{'offset'})
@@ -1535,6 +1550,69 @@ class ObjectElement {
      * @throws Exception
      */
     public static function from(stdClass $obj): ObjectElement {
+        if (!property_exists($obj, 'caucus')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'congress_numbers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'current')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'district')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'enddate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'extra')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'leadership_title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'party')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'person')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'phone')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'role_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'role_type_label')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'senator_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'senator_rank')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'startdate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title_long')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'website')) {
+            throw new Exception("Missing required property");
+        }
         return new ObjectElement(
          ObjectElement::fromCaucus($obj->{'caucus'})
         ,ObjectElement::fromCongressNumbers($obj->{'congress_numbers'})
@@ -1911,6 +1989,12 @@ class Extra {
      * @throws Exception
      */
     public static function from(stdClass $obj): Extra {
+        if (!property_exists($obj, 'address')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'office')) {
+            throw new Exception("Missing required property");
+        }
         return new Extra(
          Extra::fromAddress($obj->{'address'})
         ,Extra::fromContactForm($obj->{'contact_form'})
@@ -2983,6 +3067,60 @@ class Person {
      * @throws Exception
      */
     public static function from(stdClass $obj): Person {
+        if (!property_exists($obj, 'bioguideid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'birthday')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cspanid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'firstname')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gender')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gender_label')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lastname')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'middlename')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'namemod')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nickname')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'osid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pvsid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sortname')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'twitterid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'youtubeid')) {
+            throw new Exception("Missing required property");
+        }
         return new Person(
          Person::fromBioguideid($obj->{'bioguideid'})
         ,Person::fromBirthday($obj->{'birthday'})
diff --git a/base/php/test/inputs/json/misc/2465e.json/default/TopLevel.php b/head/php/test/inputs/json/misc/2465e.json/default/TopLevel.php
index f131bc9..ef53306 100644
--- a/base/php/test/inputs/json/misc/2465e.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/2465e.json/default/TopLevel.php
@@ -479,6 +479,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'basePath')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'definitions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'host')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'info')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'paths')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'produces')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'schemes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'swagger')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBasePath($obj->{'basePath'})
         ,TopLevel::fromDefinitions($obj->{'definitions'})
@@ -592,6 +616,9 @@ class Definitions {
      * @throws Exception
      */
     public static function from(stdClass $obj): Definitions {
+        if (!property_exists($obj, 'Taxonomy')) {
+            throw new Exception("Missing required property");
+        }
         return new Definitions(
          Definitions::fromTaxonomy($obj->{'Taxonomy'})
         );
@@ -691,6 +718,9 @@ class Taxonomy {
      * @throws Exception
      */
     public static function from(stdClass $obj): Taxonomy {
+        if (!property_exists($obj, 'properties')) {
+            throw new Exception("Missing required property");
+        }
         return new Taxonomy(
          Taxonomy::fromProperties($obj->{'properties'})
         );
@@ -1055,6 +1085,24 @@ class Properties {
      * @throws Exception
      */
     public static function from(stdClass $obj): Properties {
+        if (!property_exists($obj, 'annotations')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'datatype_properties')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'label')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sub_class_of')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Properties(
          Properties::fromAnnotations($obj->{'annotations'})
         ,Properties::fromDatatypeProperties($obj->{'datatype_properties'})
@@ -1215,6 +1263,12 @@ class Annotations {
      * @throws Exception
      */
     public static function from(stdClass $obj): Annotations {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Annotations(
          Annotations::fromDescription($obj->{'description'})
         ,Annotations::fromType($obj->{'type'})
@@ -1419,6 +1473,15 @@ class Info {
      * @throws Exception
      */
     public static function from(stdClass $obj): Info {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'version')) {
+            throw new Exception("Missing required property");
+        }
         return new Info(
          Info::fromDescription($obj->{'description'})
         ,Info::fromTitle($obj->{'title'})
@@ -1522,6 +1585,9 @@ class Paths {
      * @throws Exception
      */
     public static function from(stdClass $obj): Paths {
+        if (!property_exists($obj, '/ita_taxonomies/search')) {
+            throw new Exception("Missing required property");
+        }
         return new Paths(
          Paths::fromItaTaxonomiesSearch($obj->{'/ita_taxonomies/search'})
         );
@@ -1621,6 +1687,9 @@ class ItaTaxonomiesSearch {
      * @throws Exception
      */
     public static function from(stdClass $obj): ItaTaxonomiesSearch {
+        if (!property_exists($obj, 'get')) {
+            throw new Exception("Missing required property");
+        }
         return new ItaTaxonomiesSearch(
          ItaTaxonomiesSearch::fromGet($obj->{'get'})
         );
@@ -1954,6 +2023,21 @@ class Get {
      * @throws Exception
      */
     public static function from(stdClass $obj): Get {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'parameters')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'responses')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'summary')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tags')) {
+            throw new Exception("Missing required property");
+        }
         return new Get(
          Get::fromDescription($obj->{'description'})
         ,Get::fromParameters($obj->{'parameters'})
@@ -2320,6 +2404,24 @@ class Parameter {
      * @throws Exception
      */
     public static function from(stdClass $obj): Parameter {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'format')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'in')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'required')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Parameter(
          Parameter::fromDescription($obj->{'description'})
         ,Parameter::fromFormat($obj->{'format'})
@@ -2429,6 +2531,9 @@ class Responses {
      * @throws Exception
      */
     public static function from(stdClass $obj): Responses {
+        if (!property_exists($obj, '200')) {
+            throw new Exception("Missing required property");
+        }
         return new Responses(
          Responses::fromThe200($obj->{'200'})
         );
@@ -2580,6 +2685,12 @@ class The200 {
      * @throws Exception
      */
     public static function from(stdClass $obj): The200 {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'schema')) {
+            throw new Exception("Missing required property");
+        }
         return new The200(
          The200::fromDescription($obj->{'description'})
         ,The200::fromSchema($obj->{'schema'})
@@ -2680,6 +2791,9 @@ class Schema {
      * @throws Exception
      */
     public static function from(stdClass $obj): Schema {
+        if (!property_exists($obj, '$ref')) {
+            throw new Exception("Missing required property");
+        }
         return new Schema(
          Schema::fromRef($obj->{'$ref'})
         );
diff --git a/base/php/test/inputs/json/misc/24f52.json/default/TopLevel.php b/head/php/test/inputs/json/misc/24f52.json/default/TopLevel.php
index 3a8b02e..d1cdcf2 100644
--- a/base/php/test/inputs/json/misc/24f52.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/24f52.json/default/TopLevel.php
@@ -450,6 +450,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'delay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'IATA')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ICAO')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCity($obj->{'city'})
         ,TopLevel::fromDelay($obj->{'delay'})
@@ -978,6 +1002,33 @@ class Status {
      * @throws Exception
      */
     public static function from(stdClass $obj): Status {
+        if (!property_exists($obj, 'avgDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureBegin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureEnd')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'endTime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'maxDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Status(
          Status::fromAvgDelay($obj->{'avgDelay'})
         ,Status::fromClosureBegin($obj->{'closureBegin'})
@@ -1301,6 +1352,21 @@ class Weather {
      * @throws Exception
      */
     public static function from(stdClass $obj): Weather {
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Weather(
          Weather::fromMeta($obj->{'meta'})
         ,Weather::fromTemp($obj->{'temp'})
@@ -1511,6 +1577,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'credit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromCredit($obj->{'credit'})
         ,Meta::fromUpdated($obj->{'updated'})
diff --git a/base/php/test/inputs/json/misc/262f0.json/default/TopLevel.php b/head/php/test/inputs/json/misc/262f0.json/default/TopLevel.php
index 141d85e..da2fe1a 100644
--- a/base/php/test/inputs/json/misc/262f0.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/262f0.json/default/TopLevel.php
@@ -85,6 +85,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'query')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromQuery($obj->{'query'})
         );
@@ -347,6 +350,18 @@ class Query {
      * @throws Exception
      */
     public static function from(stdClass $obj): Query {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lang')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new Query(
          Query::fromCount($obj->{'count'})
         ,Query::fromCreated($obj->{'created'})
@@ -452,6 +467,9 @@ class Results {
      * @throws Exception
      */
     public static function from(stdClass $obj): Results {
+        if (!property_exists($obj, 'channel')) {
+            throw new Exception("Missing required property");
+        }
         return new Results(
          Results::fromChannel($obj->{'channel'})
         );
@@ -1181,6 +1199,45 @@ class Channel {
      * @throws Exception
      */
     public static function from(stdClass $obj): Channel {
+        if (!property_exists($obj, 'astronomy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'atmosphere')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'image')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'language')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lastBuildDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'location')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ttl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'units')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Channel(
          Channel::fromAstronomy($obj->{'astronomy'})
         ,Channel::fromAtmosphere($obj->{'atmosphere'})
@@ -1355,6 +1412,12 @@ class Astronomy {
      * @throws Exception
      */
     public static function from(stdClass $obj): Astronomy {
+        if (!property_exists($obj, 'sunrise')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sunset')) {
+            throw new Exception("Missing required property");
+        }
         return new Astronomy(
          Astronomy::fromSunrise($obj->{'sunrise'})
         ,Astronomy::fromSunset($obj->{'sunset'})
@@ -1611,6 +1674,18 @@ class Atmosphere {
      * @throws Exception
      */
     public static function from(stdClass $obj): Atmosphere {
+        if (!property_exists($obj, 'humidity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rising')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
         return new Atmosphere(
          Atmosphere::fromHumidity($obj->{'humidity'})
         ,Atmosphere::fromPressure($obj->{'pressure'})
@@ -1923,6 +1998,21 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromHeight($obj->{'height'})
         ,Image::fromLink($obj->{'link'})
@@ -2459,6 +2549,33 @@ class Item {
      * @throws Exception
      */
     public static function from(stdClass $obj): Item {
+        if (!property_exists($obj, 'condition')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forecast')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'guid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'long')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pubDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
         return new Item(
          Item::fromCondition($obj->{'condition'})
         ,Item::fromDescription($obj->{'description'})
@@ -2730,6 +2847,18 @@ class Condition {
      * @throws Exception
      */
     public static function from(stdClass $obj): Condition {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Condition(
          Condition::fromCode($obj->{'code'})
         ,Condition::fromDate($obj->{'date'})
@@ -3148,6 +3277,24 @@ class Forecast {
      * @throws Exception
      */
     public static function from(stdClass $obj): Forecast {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'day')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'high')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'low')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Forecast(
          Forecast::fromCode($obj->{'code'})
         ,Forecast::fromDate($obj->{'date'})
@@ -3256,6 +3403,9 @@ class GUID {
      * @throws Exception
      */
     public static function from(stdClass $obj): GUID {
+        if (!property_exists($obj, 'isPermaLink')) {
+            throw new Exception("Missing required property");
+        }
         return new GUID(
          GUID::fromIsPermaLink($obj->{'isPermaLink'})
         );
@@ -3458,6 +3608,15 @@ class Location {
      * @throws Exception
      */
     public static function from(stdClass $obj): Location {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'region')) {
+            throw new Exception("Missing required property");
+        }
         return new Location(
          Location::fromCity($obj->{'city'})
         ,Location::fromCountry($obj->{'country'})
@@ -3716,6 +3875,18 @@ class Units {
      * @throws Exception
      */
     public static function from(stdClass $obj): Units {
+        if (!property_exists($obj, 'distance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temperature')) {
+            throw new Exception("Missing required property");
+        }
         return new Units(
          Units::fromDistance($obj->{'distance'})
         ,Units::fromPressure($obj->{'pressure'})
@@ -3924,6 +4095,15 @@ class Wind {
      * @throws Exception
      */
     public static function from(stdClass $obj): Wind {
+        if (!property_exists($obj, 'chill')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'direction')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
         return new Wind(
          Wind::fromChill($obj->{'chill'})
         ,Wind::fromDirection($obj->{'direction'})
diff --git a/base/php/test/inputs/json/misc/26b49.json/default/TopLevel.php b/head/php/test/inputs/json/misc/26b49.json/default/TopLevel.php
index 2bbaf2f..4f73907 100644
--- a/base/php/test/inputs/json/misc/26b49.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/26b49.json/default/TopLevel.php
@@ -202,6 +202,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pagination')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromMeta($obj->{'meta'})
@@ -1202,6 +1211,57 @@ class Datum {
      * @throws Exception
      */
     public static function from(stdClass $obj): Datum {
+        if (!property_exists($obj, 'bitly_gif_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bitly_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'content_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'embed_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'images')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'import_datetime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_indexable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rating')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'slug')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source_post_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source_tld')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trending_datetime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'username')) {
+            throw new Exception("Missing required property");
+        }
         return new Datum(
          Datum::fromBitlyGIFURL($obj->{'bitly_gif_url'})
         ,Datum::fromBitlyURL($obj->{'bitly_url'})
@@ -2574,6 +2634,72 @@ class Images {
      * @throws Exception
      */
     public static function from(stdClass $obj): Images {
+        if (!property_exists($obj, 'downsized')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_large')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_medium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_downsampled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_small_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_downsampled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_small_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'looping')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original_mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview_gif')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview_webp')) {
+            throw new Exception("Missing required property");
+        }
         return new Images(
          Images::fromDownsized($obj->{'downsized'})
         ,Images::fromDownsizedLarge($obj->{'downsized_large'})
@@ -2884,6 +3010,15 @@ class Downsized {
      * @throws Exception
      */
     public static function from(stdClass $obj): Downsized {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Downsized(
          Downsized::fromHeight($obj->{'height'})
         ,Downsized::fromSize($obj->{'size'})
@@ -3144,6 +3279,18 @@ class DownsizedSmall {
      * @throws Exception
      */
     public static function from(stdClass $obj): DownsizedSmall {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4_size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new DownsizedSmall(
          DownsizedSmall::fromHeight($obj->{'height'})
         ,DownsizedSmall::fromMp4($obj->{'mp4'})
@@ -3756,6 +3903,24 @@ class FixedHeight {
      * @throws Exception
      */
     public static function from(stdClass $obj): FixedHeight {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'webp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'webp_size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new FixedHeight(
          FixedHeight::fromFrames($obj->{'frames'})
         ,FixedHeight::fromHash($obj->{'hash'})
@@ -3924,6 +4089,12 @@ class Looping {
      * @throws Exception
      */
     public static function from(stdClass $obj): Looping {
+        if (!property_exists($obj, 'mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4_size')) {
+            throw new Exception("Missing required property");
+        }
         return new Looping(
          Looping::fromMp4($obj->{'mp4'})
         ,Looping::fromMp4Size($obj->{'mp4_size'})
@@ -4396,6 +4567,21 @@ class User {
      * @throws Exception
      */
     public static function from(stdClass $obj): User {
+        if (!property_exists($obj, 'avatar_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banner_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'display_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profile_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'username')) {
+            throw new Exception("Missing required property");
+        }
         return new User(
          User::fromAvatarURL($obj->{'avatar_url'})
         ,User::fromBannerURL($obj->{'banner_url'})
@@ -4608,6 +4794,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'msg')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'response_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromMsg($obj->{'msg'})
         ,Meta::fromResponseID($obj->{'response_id'})
@@ -4814,6 +5009,15 @@ class Pagination {
      * @throws Exception
      */
     public static function from(stdClass $obj): Pagination {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'offset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total_count')) {
+            throw new Exception("Missing required property");
+        }
         return new Pagination(
          Pagination::fromCount($obj->{'count'})
         ,Pagination::fromOffset($obj->{'offset'})
diff --git a/base/php/test/inputs/json/misc/26c9c.json/default/TopLevel.php b/head/php/test/inputs/json/misc/26c9c.json/default/TopLevel.php
index e1fef83..35735b4 100644
--- a/base/php/test/inputs/json/misc/26c9c.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/26c9c.json/default/TopLevel.php
@@ -190,6 +190,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromMeta($obj->{'meta'})
@@ -291,6 +297,9 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'view')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromView($obj->{'view'})
         );
@@ -2383,6 +2392,120 @@ class View {
      * @throws Exception
      */
     public static function from(stdClass $obj): View {
+        if (!property_exists($obj, 'attribution')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'attributionLink')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'averageRating')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'category')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'columns')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'createdAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'displayType')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downloadCount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'grants')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hideFromCatalog')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hideFromDataJson')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'indexUpdatedAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locale')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'metadata')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'newBackend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'numberOfComments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'oid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'owner')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'provenance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationAppendEnabled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationGroup')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationStage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'query')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rights')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowsUpdatedAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowsUpdatedBy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tableAuthor')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tableId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'totalTimesRated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewCount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewLastModified')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewType')) {
+            throw new Exception("Missing required property");
+        }
         return new View(
          View::fromAttribution($obj->{'attribution'})
         ,View::fromAttributionLink($obj->{'attributionLink'})
@@ -3131,6 +3254,27 @@ class Column {
      * @throws Exception
      */
     public static function from(stdClass $obj): Column {
+        if (!property_exists($obj, 'dataTypeName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fieldName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'format')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'position')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'renderTypeName')) {
+            throw new Exception("Missing required property");
+        }
         return new Column(
          Column::fromCachedContents($obj->{'cachedContents'})
         ,Column::fromDataTypeName($obj->{'dataTypeName'})
@@ -3593,6 +3737,21 @@ class CachedContents {
      * @throws Exception
      */
     public static function from(stdClass $obj): CachedContents {
+        if (!property_exists($obj, 'largest')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'non_null')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'null')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'smallest')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'top')) {
+            throw new Exception("Missing required property");
+        }
         return new CachedContents(
          CachedContents::fromAverage($obj->{'average'})
         ,CachedContents::fromLargest($obj->{'largest'})
@@ -3755,6 +3914,12 @@ class Top {
      * @throws Exception
      */
     public static function from(stdClass $obj): Top {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
         return new Top(
          Top::fromCount($obj->{'count'})
         ,Top::fromItem($obj->{'item'})
@@ -4273,6 +4438,15 @@ class Grant {
      * @throws Exception
      */
     public static function from(stdClass $obj): Grant {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'inherited')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Grant(
          Grant::fromFlags($obj->{'flags'})
         ,Grant::fromInherited($obj->{'inherited'})
@@ -4664,6 +4838,24 @@ class Metadata {
      * @throws Exception
      */
     public static function from(stdClass $obj): Metadata {
+        if (!property_exists($obj, 'attachments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'availableDisplayTypes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'custom_fields')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'jsonQuery')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rdfSubject')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'renderTypeConfig')) {
+            throw new Exception("Missing required property");
+        }
         return new Metadata(
          Metadata::fromAttachments($obj->{'attachments'})
         ,Metadata::fromAvailableDisplayTypes($obj->{'availableDisplayTypes'})
@@ -4928,6 +5120,18 @@ class Attachment {
      * @throws Exception
      */
     public static function from(stdClass $obj): Attachment {
+        if (!property_exists($obj, 'assetId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'blobId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'filename')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new Attachment(
          Attachment::fromAssetID($obj->{'assetId'})
         ,Attachment::fromBlobID($obj->{'blobId'})
@@ -5245,6 +5449,21 @@ class CustomFields {
      * @throws Exception
      */
     public static function from(stdClass $obj): CustomFields {
+        if (!property_exists($obj, 'Additional Resources')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Common Core')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Dataset Information')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Dataset Summary')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Notes')) {
+            throw new Exception("Missing required property");
+        }
         return new CustomFields(
          CustomFields::fromAdditionalResources($obj->{'Additional Resources'})
         ,CustomFields::fromCommonCore($obj->{'Common Core'})
@@ -5403,6 +5622,12 @@ class AdditionalResources {
      * @throws Exception
      */
     public static function from(stdClass $obj): AdditionalResources {
+        if (!property_exists($obj, 'See Also ')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'See Also')) {
+            throw new Exception("Missing required property");
+        }
         return new AdditionalResources(
          AdditionalResources::fromAdditionalResourcesSeeAlso($obj->{'See Also '})
         ,AdditionalResources::fromSeeAlso($obj->{'See Also'})
@@ -5607,6 +5832,15 @@ class CommonCore {
      * @throws Exception
      */
     public static function from(stdClass $obj): CommonCore {
+        if (!property_exists($obj, 'Contact Email')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Contact Name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Publisher')) {
+            throw new Exception("Missing required property");
+        }
         return new CommonCore(
          CommonCore::fromContactEmail($obj->{'Contact Email'})
         ,CommonCore::fromContactName($obj->{'Contact Name'})
@@ -5709,6 +5943,9 @@ class DatasetInformation {
      * @throws Exception
      */
     public static function from(stdClass $obj): DatasetInformation {
+        if (!property_exists($obj, 'Agency')) {
+            throw new Exception("Missing required property");
+        }
         return new DatasetInformation(
          DatasetInformation::fromAgency($obj->{'Agency'})
         );
@@ -6223,6 +6460,33 @@ class DatasetSummary {
      * @throws Exception
      */
     public static function from(stdClass $obj): DatasetSummary {
+        if (!property_exists($obj, 'Contact Information')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Coverage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Data Frequency')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Dataset Owner')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Granularity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Organization')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Posting Frequency')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Time Period')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Units')) {
+            throw new Exception("Missing required property");
+        }
         return new DatasetSummary(
          DatasetSummary::fromContactInformation($obj->{'Contact Information'})
         ,DatasetSummary::fromCoverage($obj->{'Coverage'})
@@ -6337,6 +6601,9 @@ class Notes {
      * @throws Exception
      */
     public static function from(stdClass $obj): Notes {
+        if (!property_exists($obj, 'Notes')) {
+            throw new Exception("Missing required property");
+        }
         return new Notes(
          Notes::fromNotes($obj->{'Notes'})
         );
@@ -6447,6 +6714,9 @@ class JSONQuery {
      * @throws Exception
      */
     public static function from(stdClass $obj): JSONQuery {
+        if (!property_exists($obj, 'order')) {
+            throw new Exception("Missing required property");
+        }
         return new JSONQuery(
          JSONQuery::fromOrder($obj->{'order'})
         );
@@ -6597,6 +6867,12 @@ class Order {
      * @throws Exception
      */
     public static function from(stdClass $obj): Order {
+        if (!property_exists($obj, 'ascending')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'columnFieldName')) {
+            throw new Exception("Missing required property");
+        }
         return new Order(
          Order::fromAscending($obj->{'ascending'})
         ,Order::fromColumnFieldName($obj->{'columnFieldName'})
@@ -6698,6 +6974,9 @@ class RenderTypeConfig {
      * @throws Exception
      */
     public static function from(stdClass $obj): RenderTypeConfig {
+        if (!property_exists($obj, 'visible')) {
+            throw new Exception("Missing required property");
+        }
         return new RenderTypeConfig(
          RenderTypeConfig::fromVisible($obj->{'visible'})
         );
@@ -6796,6 +7075,9 @@ class Visible {
      * @throws Exception
      */
     public static function from(stdClass $obj): Visible {
+        if (!property_exists($obj, 'table')) {
+            throw new Exception("Missing required property");
+        }
         return new Visible(
          Visible::fromTable($obj->{'table'})
         );
@@ -7272,6 +7554,30 @@ class Owner {
      * @throws Exception
      */
     public static function from(stdClass $obj): Owner {
+        if (!property_exists($obj, 'displayName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profileImageUrlLarge')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profileImageUrlMedium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profileImageUrlSmall')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rights')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'roleName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'screenName')) {
+            throw new Exception("Missing required property");
+        }
         return new Owner(
          Owner::fromDisplayName($obj->{'displayName'})
         ,Owner::fromID($obj->{'id'})
@@ -7396,6 +7702,9 @@ class Query {
      * @throws Exception
      */
     public static function from(stdClass $obj): Query {
+        if (!property_exists($obj, 'orderBys')) {
+            throw new Exception("Missing required property");
+        }
         return new Query(
          Query::fromOrderBys($obj->{'orderBys'})
         );
@@ -7547,6 +7856,12 @@ class OrderBy {
      * @throws Exception
      */
     public static function from(stdClass $obj): OrderBy {
+        if (!property_exists($obj, 'ascending')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'expression')) {
+            throw new Exception("Missing required property");
+        }
         return new OrderBy(
          OrderBy::fromAscending($obj->{'ascending'})
         ,OrderBy::fromExpression($obj->{'expression'})
@@ -7699,6 +8014,12 @@ class Expression {
      * @throws Exception
      */
     public static function from(stdClass $obj): Expression {
+        if (!property_exists($obj, 'columnId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Expression(
          Expression::fromColumnID($obj->{'columnId'})
         ,Expression::fromType($obj->{'type'})
diff --git a/base/php/test/inputs/json/misc/27332.json/default/TopLevel.php b/head/php/test/inputs/json/misc/27332.json/default/TopLevel.php
index f7bc7dc..3e0ca80 100644
--- a/base/php/test/inputs/json/misc/27332.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/27332.json/default/TopLevel.php
@@ -137,6 +137,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromKind($obj->{'kind'})
@@ -408,6 +414,18 @@ class TopLevelData {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevelData {
+        if (!property_exists($obj, 'after')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'before')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'children')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'modhash')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevelData(
          TopLevelData::fromAfter($obj->{'after'})
         ,TopLevelData::fromBefore($obj->{'before'})
@@ -566,6 +584,12 @@ class Child {
      * @throws Exception
      */
     public static function from(stdClass $obj): Child {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new Child(
          Child::fromData($obj->{'data'})
         ,Child::fromKind($obj->{'kind'})
@@ -4125,6 +4149,192 @@ class ChildData {
      * @throws Exception
      */
     public static function from(stdClass $obj): ChildData {
+        if (!property_exists($obj, 'approved_at_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'approved_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'archived')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author_flair_css_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author_flair_text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banned_at_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banned_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'brand_safe')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'can_gild')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'can_mod_post')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'clicked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'contest_mode')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'distinguished')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'domain')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downs')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'edited')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gilded')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hidden')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hide_score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_self')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_video')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'likes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link_flair_css_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link_flair_text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'media')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'media_embed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mod_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'over_18')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'permalink')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'quarantine')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'removal_reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'report_reasons')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'saved')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'secure_media')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'secure_media_embed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'selftext')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'selftext_html')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'spoiler')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stickied')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_name_prefixed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'suggested_sort')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_width')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ups')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'user_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'view_count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visited')) {
+            throw new Exception("Missing required property");
+        }
         return new ChildData(
          ChildData::fromApprovedAtUTC($obj->{'approved_at_utc'})
         ,ChildData::fromApprovedBy($obj->{'approved_by'})
@@ -4460,6 +4670,12 @@ class Media {
      * @throws Exception
      */
     public static function from(stdClass $obj): Media {
+        if (!property_exists($obj, 'oembed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Media(
          Media::fromOembed($obj->{'oembed'})
         ,Media::fromType($obj->{'type'})
@@ -5132,6 +5348,42 @@ class Oembed {
      * @throws Exception
      */
     public static function from(stdClass $obj): Oembed {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'html')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'provider_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'provider_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_width')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'version')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Oembed(
          Oembed::fromDescription($obj->{'description'})
         ,Oembed::fromHeight($obj->{'height'})
@@ -5665,6 +5917,12 @@ class Preview {
      * @throws Exception
      */
     public static function from(stdClass $obj): Preview {
+        if (!property_exists($obj, 'enabled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'images')) {
+            throw new Exception("Missing required property");
+        }
         return new Preview(
          Preview::fromEnabled($obj->{'enabled'})
         ,Preview::fromImages($obj->{'images'})
@@ -5935,6 +6193,18 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'resolutions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'variants')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromID($obj->{'id'})
         ,Image::fromResolutions($obj->{'resolutions'})
@@ -6143,6 +6413,15 @@ class Source {
      * @throws Exception
      */
     public static function from(stdClass $obj): Source {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Source(
          Source::fromHeight($obj->{'height'})
         ,Source::fromURL($obj->{'url'})
diff --git a/base/php/test/inputs/json/misc/29f47.json/default/TopLevel.php b/head/php/test/inputs/json/misc/29f47.json/default/TopLevel.php
index 8d4148c..b19d1f7 100644
--- a/base/php/test/inputs/json/misc/29f47.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/29f47.json/default/TopLevel.php
@@ -137,6 +137,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromKind($obj->{'kind'})
@@ -408,6 +414,18 @@ class TopLevelData {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevelData {
+        if (!property_exists($obj, 'after')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'before')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'children')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'modhash')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevelData(
          TopLevelData::fromAfter($obj->{'after'})
         ,TopLevelData::fromBefore($obj->{'before'})
@@ -566,6 +584,12 @@ class Child {
      * @throws Exception
      */
     public static function from(stdClass $obj): Child {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new Child(
          Child::fromData($obj->{'data'})
         ,Child::fromKind($obj->{'kind'})
@@ -4102,6 +4126,192 @@ class ChildData {
      * @throws Exception
      */
     public static function from(stdClass $obj): ChildData {
+        if (!property_exists($obj, 'approved_at_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'approved_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'archived')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author_flair_css_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author_flair_text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banned_at_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banned_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'brand_safe')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'can_gild')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'can_mod_post')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'clicked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'contest_mode')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'distinguished')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'domain')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downs')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'edited')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gilded')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hidden')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hide_score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_self')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_video')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'likes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link_flair_css_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link_flair_text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'media')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'media_embed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mod_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'over_18')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'permalink')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'quarantine')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'removal_reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'report_reasons')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'saved')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'secure_media')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'secure_media_embed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'selftext')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'selftext_html')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'spoiler')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stickied')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_name_prefixed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'suggested_sort')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_width')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ups')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'user_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'view_count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visited')) {
+            throw new Exception("Missing required property");
+        }
         return new ChildData(
          ChildData::fromApprovedAtUTC($obj->{'approved_at_utc'})
         ,ChildData::fromApprovedBy($obj->{'approved_by'})
@@ -4578,6 +4788,12 @@ class Preview {
      * @throws Exception
      */
     public static function from(stdClass $obj): Preview {
+        if (!property_exists($obj, 'enabled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'images')) {
+            throw new Exception("Missing required property");
+        }
         return new Preview(
          Preview::fromEnabled($obj->{'enabled'})
         ,Preview::fromImages($obj->{'images'})
@@ -4848,6 +5064,18 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'resolutions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'variants')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromID($obj->{'id'})
         ,Image::fromResolutions($obj->{'resolutions'})
@@ -5056,6 +5284,15 @@ class Source {
      * @throws Exception
      */
     public static function from(stdClass $obj): Source {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Source(
          Source::fromHeight($obj->{'height'})
         ,Source::fromURL($obj->{'url'})
@@ -5397,6 +5634,12 @@ class GIF {
      * @throws Exception
      */
     public static function from(stdClass $obj): GIF {
+        if (!property_exists($obj, 'resolutions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
         return new GIF(
          GIF::fromResolutions($obj->{'resolutions'})
         ,GIF::fromSource($obj->{'source'})
diff --git a/base/php/test/inputs/json/misc/2d4e2.json/default/TopLevel.php b/head/php/test/inputs/json/misc/2d4e2.json/default/TopLevel.php
index 56a15ee..9aed10d 100644
--- a/base/php/test/inputs/json/misc/2d4e2.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/2d4e2.json/default/TopLevel.php
@@ -149,6 +149,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'objects')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromMeta($obj->{'meta'})
         ,TopLevel::fromObjects($obj->{'objects'})
@@ -353,6 +359,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'limit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'offset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total_count')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromLimit($obj->{'limit'})
         ,Meta::fromOffset($obj->{'offset'})
@@ -1648,6 +1663,75 @@ class ObjectElement {
      * @throws Exception
      */
     public static function from(stdClass $obj): ObjectElement {
+        if (!property_exists($obj, 'caucus')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'congress_numbers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'current')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'district')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'enddate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'extra')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'leadership_title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'party')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'person')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'phone')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'role_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'role_type_label')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'senator_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'senator_class_label')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'senator_rank')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'senator_rank_label')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'startdate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title_long')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'website')) {
+            throw new Exception("Missing required property");
+        }
         return new ObjectElement(
          ObjectElement::fromCaucus($obj->{'caucus'})
         ,ObjectElement::fromCongressNumbers($obj->{'congress_numbers'})
@@ -2071,6 +2155,15 @@ class Extra {
      * @throws Exception
      */
     public static function from(stdClass $obj): Extra {
+        if (!property_exists($obj, 'address')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'contact_form')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'office')) {
+            throw new Exception("Missing required property");
+        }
         return new Extra(
          Extra::fromAddress($obj->{'address'})
         ,Extra::fromContactForm($obj->{'contact_form'})
@@ -3084,6 +3177,60 @@ class Person {
      * @throws Exception
      */
     public static function from(stdClass $obj): Person {
+        if (!property_exists($obj, 'bioguideid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'birthday')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cspanid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'firstname')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gender')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gender_label')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lastname')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'middlename')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'namemod')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nickname')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'osid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pvsid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sortname')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'twitterid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'youtubeid')) {
+            throw new Exception("Missing required property");
+        }
         return new Person(
          Person::fromBioguideid($obj->{'bioguideid'})
         ,Person::fromBirthday($obj->{'birthday'})
diff --git a/base/php/test/inputs/json/misc/31189.json/default/TopLevel.php b/head/php/test/inputs/json/misc/31189.json/default/TopLevel.php
index 78ee1f9..3427970 100644
--- a/base/php/test/inputs/json/misc/31189.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/31189.json/default/TopLevel.php
@@ -203,6 +203,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'details')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rates')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'version')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromDetails($obj->{'details'})
         ,TopLevel::fromRates($obj->{'rates'})
@@ -473,6 +482,18 @@ class Rate {
      * @throws Exception
      */
     public static function from(stdClass $obj): Rate {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country_code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'periods')) {
+            throw new Exception("Missing required property");
+        }
         return new Rate(
          Rate::fromCode($obj->{'code'})
         ,Rate::fromCountryCode($obj->{'country_code'})
@@ -630,6 +651,12 @@ class Period {
      * @throws Exception
      */
     public static function from(stdClass $obj): Period {
+        if (!property_exists($obj, 'effective_from')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rates')) {
+            throw new Exception("Missing required property");
+        }
         return new Period(
          Period::fromEffectiveFrom($obj->{'effective_from'})
         ,Period::fromRates($obj->{'rates'})
@@ -1040,6 +1067,9 @@ class Rates {
      * @throws Exception
      */
     public static function from(stdClass $obj): Rates {
+        if (!property_exists($obj, 'standard')) {
+            throw new Exception("Missing required property");
+        }
         return new Rates(
          Rates::fromParking($obj->{'parking'})
         ,Rates::fromReduced($obj->{'reduced'})
diff --git a/base/php/test/inputs/json/misc/32431.json/default/TopLevel.php b/head/php/test/inputs/json/misc/32431.json/default/TopLevel.php
index b624eb6..aa93e2e 100644
--- a/base/php/test/inputs/json/misc/32431.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/32431.json/default/TopLevel.php
@@ -267,6 +267,18 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'bbox')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'features')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'metadata')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBbox($obj->{'bbox'})
         ,TopLevel::fromFeatures($obj->{'features'})
@@ -530,6 +542,18 @@ class Feature {
      * @throws Exception
      */
     public static function from(stdClass $obj): Feature {
+        if (!property_exists($obj, 'geometry')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'properties')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Feature(
          Feature::fromGeometry($obj->{'geometry'})
         ,Feature::fromID($obj->{'id'})
@@ -701,6 +725,12 @@ class Geometry {
      * @throws Exception
      */
     public static function from(stdClass $obj): Geometry {
+        if (!property_exists($obj, 'coordinates')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Geometry(
          Geometry::fromCoordinates($obj->{'coordinates'})
         ,Geometry::fromType($obj->{'type'})
@@ -2191,6 +2221,84 @@ class Properties {
      * @throws Exception
      */
     public static function from(stdClass $obj): Properties {
+        if (!property_exists($obj, 'alert')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cdi')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'detail')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'dmin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'felt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gap')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ids')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mag')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'magType')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mmi')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'net')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nst')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'place')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rms')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sig')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sources')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'time')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tsunami')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'types')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tz')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Properties(
          Properties::fromAlert($obj->{'alert'})
         ,Properties::fromCdi($obj->{'cdi'})
@@ -2791,6 +2899,24 @@ class Metadata {
      * @throws Exception
      */
     public static function from(stdClass $obj): Metadata {
+        if (!property_exists($obj, 'api')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'generated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Metadata(
          Metadata::fromAPI($obj->{'api'})
         ,Metadata::fromCount($obj->{'count'})
diff --git a/base/php/test/inputs/json/misc/32d5c.json/default/TopLevel.php b/head/php/test/inputs/json/misc/32d5c.json/default/TopLevel.php
index b78198d..0641104 100644
--- a/base/php/test/inputs/json/misc/32d5c.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/32d5c.json/default/TopLevel.php
@@ -465,6 +465,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'BirthDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'BirthDateIsProtected')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'GenderTypeID')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Notes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ParliamentaryName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'PersonID')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'PhotoURL')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'PreferredName')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBirthDate($obj->{'BirthDate'})
         ,TopLevel::fromBirthDateIsProtected($obj->{'BirthDateIsProtected'})
diff --git a/base/php/test/inputs/json/misc/337ed.json/default/TopLevel.php b/head/php/test/inputs/json/misc/337ed.json/default/TopLevel.php
index 98669fa..659a3a1 100644
--- a/base/php/test/inputs/json/misc/337ed.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/337ed.json/default/TopLevel.php
@@ -409,6 +409,27 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'facets')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'limit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'next')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'offset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'previous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCount($obj->{'count'})
         ,TopLevel::fromFacets($obj->{'facets'})
@@ -2397,6 +2418,102 @@ class Result {
      * @throws Exception
      */
     public static function from(stdClass $obj): Result {
+        if (!property_exists($obj, 'cost_absolute')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cost_max')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cost_min')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'customIncomes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'direct_rep_costs_max')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'direct_rep_costs_min')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'end_date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'eur_sources_grants')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'eur_sources_grants_src')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'eur_sources_procurement')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'eur_sources_procurement_src')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'new_organisation')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'no_clients')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'other_financial_information')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'other_sources_contributions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'other_sources_donation')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'other_sources_total')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'public_financing_infranational')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'public_financing_national')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'public_financing_total')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'representative')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'start_date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total_budget')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'turnover_absolute')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'turnover_max')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'turnover_min')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uri')) {
+            throw new Exception("Missing required property");
+        }
         return new Result(
          Result::fromCostAbsolute($obj->{'cost_absolute'})
         ,Result::fromCostMax($obj->{'cost_max'})
@@ -2937,6 +3054,30 @@ class CustomIncome {
      * @throws Exception
      */
     public static function from(stdClass $obj): CustomIncome {
+        if (!property_exists($obj, 'amount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uri')) {
+            throw new Exception("Missing required property");
+        }
         return new CustomIncome(
          CustomIncome::fromAmount($obj->{'amount'})
         ,CustomIncome::fromCreatedAt($obj->{'created_at'})
diff --git a/base/php/test/inputs/json/misc/33d2e.json/default/TopLevel.php b/head/php/test/inputs/json/misc/33d2e.json/default/TopLevel.php
index 85a6d1f..a2c1872 100644
--- a/base/php/test/inputs/json/misc/33d2e.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/33d2e.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'laureates')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromLaureates($obj->{'laureates'})
         );
@@ -911,6 +914,21 @@ class Laureate {
      * @throws Exception
      */
     public static function from(stdClass $obj): Laureate {
+        if (!property_exists($obj, 'born')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'died')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gender')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'prizes')) {
+            throw new Exception("Missing required property");
+        }
         return new Laureate(
          Laureate::fromBorn($obj->{'born'})
         ,Laureate::fromBornCity($obj->{'bornCity'})
@@ -1435,6 +1453,9 @@ class Prize {
      * @throws Exception
      */
     public static function from(stdClass $obj): Prize {
+        if (!property_exists($obj, 'affiliations')) {
+            throw new Exception("Missing required property");
+        }
         return new Prize(
          Prize::fromAffiliations($obj->{'affiliations'})
         ,Prize::fromCategory($obj->{'category'})
diff --git a/base/php/test/inputs/json/misc/34702.json/default/TopLevel.php b/head/php/test/inputs/json/misc/34702.json/default/TopLevel.php
index d553da7..8c93503 100644
--- a/base/php/test/inputs/json/misc/34702.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/34702.json/default/TopLevel.php
@@ -253,6 +253,18 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'crs')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'features')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'totalFeatures')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCRS($obj->{'crs'})
         ,TopLevel::fromFeatures($obj->{'features'})
@@ -410,6 +422,12 @@ class CRS {
      * @throws Exception
      */
     public static function from(stdClass $obj): CRS {
+        if (!property_exists($obj, 'properties')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new CRS(
          CRS::fromProperties($obj->{'properties'})
         ,CRS::fromType($obj->{'type'})
@@ -510,6 +528,9 @@ class CRSProperties {
      * @throws Exception
      */
     public static function from(stdClass $obj): CRSProperties {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new CRSProperties(
          CRSProperties::fromName($obj->{'name'})
         );
@@ -820,6 +841,21 @@ class Feature {
      * @throws Exception
      */
     public static function from(stdClass $obj): Feature {
+        if (!property_exists($obj, 'geometry')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'geometry_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'properties')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Feature(
          Feature::fromGeometry($obj->{'geometry'})
         ,Feature::fromGeometryName($obj->{'geometry_name'})
@@ -993,6 +1029,12 @@ class Geometry {
      * @throws Exception
      */
     public static function from(stdClass $obj): Geometry {
+        if (!property_exists($obj, 'coordinates')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Geometry(
          Geometry::fromCoordinates($obj->{'coordinates'})
         ,Geometry::fromType($obj->{'type'})
@@ -1944,6 +1986,51 @@ class FeatureProperties {
      * @throws Exception
      */
     public static function from(stdClass $obj): FeatureProperties {
+        if (!property_exists($obj, 'division')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fax')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fire_ban_r')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'latitude')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'local_govt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'longitude')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'no')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'phone')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'postcode')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'psa')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'region')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'station')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'street')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'suburb')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new FeatureProperties(
          FeatureProperties::fromDivision($obj->{'division'})
         ,FeatureProperties::fromFax($obj->{'fax'})
diff --git a/base/php/test/inputs/json/misc/3536b.json/default/TopLevel.php b/head/php/test/inputs/json/misc/3536b.json/default/TopLevel.php
index cbe87d7..19c02f4 100644
--- a/base/php/test/inputs/json/misc/3536b.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/3536b.json/default/TopLevel.php
@@ -507,6 +507,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'identifiers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'keywords')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'links')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'other_names')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'superseded_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromID($obj->{'id'})
         ,TopLevel::fromIdentifiers($obj->{'identifiers'})
@@ -672,6 +696,12 @@ class Identifier {
      * @throws Exception
      */
     public static function from(stdClass $obj): Identifier {
+        if (!property_exists($obj, 'identifier')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scheme')) {
+            throw new Exception("Missing required property");
+        }
         return new Identifier(
          Identifier::fromIdentifier($obj->{'identifier'})
         ,Identifier::fromScheme($obj->{'scheme'})
@@ -930,6 +960,12 @@ class Link {
      * @throws Exception
      */
     public static function from(stdClass $obj): Link {
+        if (!property_exists($obj, 'note')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Link(
          Link::fromNote($obj->{'note'})
         ,Link::fromURL($obj->{'url'})
@@ -1134,6 +1170,15 @@ class Text {
      * @throws Exception
      */
     public static function from(stdClass $obj): Text {
+        if (!property_exists($obj, 'media_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Text(
          Text::fromMediaType($obj->{'media_type'})
         ,Text::fromTitle($obj->{'title'})
diff --git a/base/php/test/inputs/json/misc/3659d.json/default/TopLevel.php b/head/php/test/inputs/json/misc/3659d.json/default/TopLevel.php
index 3d4f5c7..e92c16a 100644
--- a/base/php/test/inputs/json/misc/3659d.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/3659d.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'total_population')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromTotalPopulation($obj->{'total_population'})
         );
@@ -246,6 +249,12 @@ class TotalPopulation {
      * @throws Exception
      */
     public static function from(stdClass $obj): TotalPopulation {
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'population')) {
+            throw new Exception("Missing required property");
+        }
         return new TotalPopulation(
          TotalPopulation::fromDate($obj->{'date'})
         ,TotalPopulation::fromPopulation($obj->{'population'})
diff --git a/base/php/test/inputs/json/misc/36d5d.json/default/TopLevel.php b/head/php/test/inputs/json/misc/36d5d.json/default/TopLevel.php
index 3a8b02e..d1cdcf2 100644
--- a/base/php/test/inputs/json/misc/36d5d.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/36d5d.json/default/TopLevel.php
@@ -450,6 +450,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'delay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'IATA')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ICAO')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCity($obj->{'city'})
         ,TopLevel::fromDelay($obj->{'delay'})
@@ -978,6 +1002,33 @@ class Status {
      * @throws Exception
      */
     public static function from(stdClass $obj): Status {
+        if (!property_exists($obj, 'avgDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureBegin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureEnd')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'endTime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'maxDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Status(
          Status::fromAvgDelay($obj->{'avgDelay'})
         ,Status::fromClosureBegin($obj->{'closureBegin'})
@@ -1301,6 +1352,21 @@ class Weather {
      * @throws Exception
      */
     public static function from(stdClass $obj): Weather {
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Weather(
          Weather::fromMeta($obj->{'meta'})
         ,Weather::fromTemp($obj->{'temp'})
@@ -1511,6 +1577,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'credit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromCredit($obj->{'credit'})
         ,Meta::fromUpdated($obj->{'updated'})
diff --git a/base/php/test/inputs/json/misc/3a6b3.json/default/TopLevel.php b/head/php/test/inputs/json/misc/3a6b3.json/default/TopLevel.php
index 3a8b02e..d1cdcf2 100644
--- a/base/php/test/inputs/json/misc/3a6b3.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/3a6b3.json/default/TopLevel.php
@@ -450,6 +450,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'delay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'IATA')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ICAO')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCity($obj->{'city'})
         ,TopLevel::fromDelay($obj->{'delay'})
@@ -978,6 +1002,33 @@ class Status {
      * @throws Exception
      */
     public static function from(stdClass $obj): Status {
+        if (!property_exists($obj, 'avgDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureBegin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureEnd')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'endTime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'maxDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Status(
          Status::fromAvgDelay($obj->{'avgDelay'})
         ,Status::fromClosureBegin($obj->{'closureBegin'})
@@ -1301,6 +1352,21 @@ class Weather {
      * @throws Exception
      */
     public static function from(stdClass $obj): Weather {
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Weather(
          Weather::fromMeta($obj->{'meta'})
         ,Weather::fromTemp($obj->{'temp'})
@@ -1511,6 +1577,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'credit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromCredit($obj->{'credit'})
         ,Meta::fromUpdated($obj->{'updated'})
diff --git a/base/php/test/inputs/json/misc/3e9a3.json/default/TopLevel.php b/head/php/test/inputs/json/misc/3e9a3.json/default/TopLevel.php
index 8b1467d..3a0b6e2 100644
--- a/base/php/test/inputs/json/misc/3e9a3.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/3e9a3.json/default/TopLevel.php
@@ -252,6 +252,18 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'message')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'responseTime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Results')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromMessage($obj->{'message'})
         ,TopLevel::fromResponseTime($obj->{'responseTime'})
@@ -368,6 +380,9 @@ class Results {
      * @throws Exception
      */
     public static function from(stdClass $obj): Results {
+        if (!property_exists($obj, 'series')) {
+            throw new Exception("Missing required property");
+        }
         return new Results(
          Results::fromSeries($obj->{'series'})
         );
@@ -530,6 +545,12 @@ class Series {
      * @throws Exception
      */
     public static function from(stdClass $obj): Series {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'seriesID')) {
+            throw new Exception("Missing required property");
+        }
         return new Series(
          Series::fromData($obj->{'data'})
         ,Series::fromSeriesID($obj->{'seriesID'})
@@ -850,6 +871,21 @@ class Datum {
      * @throws Exception
      */
     public static function from(stdClass $obj): Datum {
+        if (!property_exists($obj, 'footnotes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'period')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'periodName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'value')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'year')) {
+            throw new Exception("Missing required property");
+        }
         return new Datum(
          Datum::fromFootnotes($obj->{'footnotes'})
         ,Datum::fromPeriod($obj->{'period'})
diff --git a/base/php/test/inputs/json/misc/3f1ce.json/default/TopLevel.php b/head/php/test/inputs/json/misc/3f1ce.json/default/TopLevel.php
index b0f662a..b20431c 100644
--- a/base/php/test/inputs/json/misc/3f1ce.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/3f1ce.json/default/TopLevel.php
@@ -85,6 +85,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'query')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromQuery($obj->{'query'})
         );
@@ -347,6 +350,18 @@ class Query {
      * @throws Exception
      */
     public static function from(stdClass $obj): Query {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lang')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new Query(
          Query::fromCount($obj->{'count'})
         ,Query::fromCreated($obj->{'created'})
@@ -452,6 +467,9 @@ class Results {
      * @throws Exception
      */
     public static function from(stdClass $obj): Results {
+        if (!property_exists($obj, 'channel')) {
+            throw new Exception("Missing required property");
+        }
         return new Results(
          Results::fromChannel($obj->{'channel'})
         );
@@ -1181,6 +1199,45 @@ class Channel {
      * @throws Exception
      */
     public static function from(stdClass $obj): Channel {
+        if (!property_exists($obj, 'astronomy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'atmosphere')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'image')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'language')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lastBuildDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'location')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ttl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'units')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Channel(
          Channel::fromAstronomy($obj->{'astronomy'})
         ,Channel::fromAtmosphere($obj->{'atmosphere'})
@@ -1355,6 +1412,12 @@ class Astronomy {
      * @throws Exception
      */
     public static function from(stdClass $obj): Astronomy {
+        if (!property_exists($obj, 'sunrise')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sunset')) {
+            throw new Exception("Missing required property");
+        }
         return new Astronomy(
          Astronomy::fromSunrise($obj->{'sunrise'})
         ,Astronomy::fromSunset($obj->{'sunset'})
@@ -1611,6 +1674,18 @@ class Atmosphere {
      * @throws Exception
      */
     public static function from(stdClass $obj): Atmosphere {
+        if (!property_exists($obj, 'humidity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rising')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
         return new Atmosphere(
          Atmosphere::fromHumidity($obj->{'humidity'})
         ,Atmosphere::fromPressure($obj->{'pressure'})
@@ -1923,6 +1998,21 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromHeight($obj->{'height'})
         ,Image::fromLink($obj->{'link'})
@@ -2459,6 +2549,33 @@ class Item {
      * @throws Exception
      */
     public static function from(stdClass $obj): Item {
+        if (!property_exists($obj, 'condition')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forecast')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'guid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'long')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pubDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
         return new Item(
          Item::fromCondition($obj->{'condition'})
         ,Item::fromDescription($obj->{'description'})
@@ -2729,6 +2846,18 @@ class Condition {
      * @throws Exception
      */
     public static function from(stdClass $obj): Condition {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Condition(
          Condition::fromCode($obj->{'code'})
         ,Condition::fromDate($obj->{'date'})
@@ -3094,6 +3223,24 @@ class Forecast {
      * @throws Exception
      */
     public static function from(stdClass $obj): Forecast {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'day')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'high')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'low')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Forecast(
          Forecast::fromCode($obj->{'code'})
         ,Forecast::fromDate($obj->{'date'})
@@ -3247,6 +3394,9 @@ class GUID {
      * @throws Exception
      */
     public static function from(stdClass $obj): GUID {
+        if (!property_exists($obj, 'isPermaLink')) {
+            throw new Exception("Missing required property");
+        }
         return new GUID(
          GUID::fromIsPermaLink($obj->{'isPermaLink'})
         );
@@ -3449,6 +3599,15 @@ class Location {
      * @throws Exception
      */
     public static function from(stdClass $obj): Location {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'region')) {
+            throw new Exception("Missing required property");
+        }
         return new Location(
          Location::fromCity($obj->{'city'})
         ,Location::fromCountry($obj->{'country'})
@@ -3707,6 +3866,18 @@ class Units {
      * @throws Exception
      */
     public static function from(stdClass $obj): Units {
+        if (!property_exists($obj, 'distance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temperature')) {
+            throw new Exception("Missing required property");
+        }
         return new Units(
          Units::fromDistance($obj->{'distance'})
         ,Units::fromPressure($obj->{'pressure'})
@@ -3915,6 +4086,15 @@ class Wind {
      * @throws Exception
      */
     public static function from(stdClass $obj): Wind {
+        if (!property_exists($obj, 'chill')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'direction')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
         return new Wind(
          Wind::fromChill($obj->{'chill'})
         ,Wind::fromDirection($obj->{'direction'})
diff --git a/base/php/test/inputs/json/misc/421d4.json/default/TopLevel.php b/head/php/test/inputs/json/misc/421d4.json/default/TopLevel.php
index 79b0457..77ef67e 100644
--- a/base/php/test/inputs/json/misc/421d4.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/421d4.json/default/TopLevel.php
@@ -190,6 +190,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromMeta($obj->{'meta'})
@@ -291,6 +297,9 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'view')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromView($obj->{'view'})
         );
@@ -2488,6 +2497,126 @@ class View {
      * @throws Exception
      */
     public static function from(stdClass $obj): View {
+        if (!property_exists($obj, 'attribution')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'averageRating')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'category')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'columns')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'createdAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'displayType')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downloadCount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'grants')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hideFromCatalog')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hideFromDataJson')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'indexUpdatedAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'license')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'licenseId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locale')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'metadata')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'newBackend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'numberOfComments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'oid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'owner')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'provenance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationAppendEnabled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationGroup')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationStage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'query')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rights')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowClass')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowsUpdatedAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowsUpdatedBy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tableAuthor')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tableId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'totalTimesRated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewCount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewLastModified')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewType')) {
+            throw new Exception("Missing required property");
+        }
         return new View(
          View::fromAttribution($obj->{'attribution'})
         ,View::fromAverageRating($obj->{'averageRating'})
@@ -3240,6 +3369,27 @@ class Column {
      * @throws Exception
      */
     public static function from(stdClass $obj): Column {
+        if (!property_exists($obj, 'dataTypeName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fieldName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'format')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'position')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'renderTypeName')) {
+            throw new Exception("Missing required property");
+        }
         return new Column(
          Column::fromCachedContents($obj->{'cachedContents'})
         ,Column::fromDataTypeName($obj->{'dataTypeName'})
@@ -3732,6 +3882,12 @@ class CachedContents {
      * @throws Exception
      */
     public static function from(stdClass $obj): CachedContents {
+        if (!property_exists($obj, 'non_null')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'null')) {
+            throw new Exception("Missing required property");
+        }
         return new CachedContents(
          CachedContents::fromAverage($obj->{'average'})
         ,CachedContents::fromLargest($obj->{'largest'})
@@ -3894,6 +4050,12 @@ class Top {
      * @throws Exception
      */
     public static function from(stdClass $obj): Top {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
         return new Top(
          Top::fromCount($obj->{'count'})
         ,Top::fromItem($obj->{'item'})
@@ -4157,6 +4319,15 @@ class Grant {
      * @throws Exception
      */
     public static function from(stdClass $obj): Grant {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'inherited')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Grant(
          Grant::fromFlags($obj->{'flags'})
         ,Grant::fromInherited($obj->{'inherited'})
@@ -4259,6 +4430,9 @@ class License {
      * @throws Exception
      */
     public static function from(stdClass $obj): License {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new License(
          License::fromName($obj->{'name'})
         );
@@ -4580,6 +4754,21 @@ class Metadata {
      * @throws Exception
      */
     public static function from(stdClass $obj): Metadata {
+        if (!property_exists($obj, 'availableDisplayTypes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rdfClass')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rdfSubject')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'renderTypeConfig')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowIdentifier')) {
+            throw new Exception("Missing required property");
+        }
         return new Metadata(
          Metadata::fromAvailableDisplayTypes($obj->{'availableDisplayTypes'})
         ,Metadata::fromRDFClass($obj->{'rdfClass'})
@@ -4687,6 +4876,9 @@ class RenderTypeConfig {
      * @throws Exception
      */
     public static function from(stdClass $obj): RenderTypeConfig {
+        if (!property_exists($obj, 'visible')) {
+            throw new Exception("Missing required property");
+        }
         return new RenderTypeConfig(
          RenderTypeConfig::fromVisible($obj->{'visible'})
         );
@@ -4785,6 +4977,9 @@ class Visible {
      * @throws Exception
      */
     public static function from(stdClass $obj): Visible {
+        if (!property_exists($obj, 'table')) {
+            throw new Exception("Missing required property");
+        }
         return new Visible(
          Visible::fromTable($obj->{'table'})
         );
@@ -4987,6 +5182,15 @@ class Owner {
      * @throws Exception
      */
     public static function from(stdClass $obj): Owner {
+        if (!property_exists($obj, 'displayName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'screenName')) {
+            throw new Exception("Missing required property");
+        }
         return new Owner(
          Owner::fromDisplayName($obj->{'displayName'})
         ,Owner::fromID($obj->{'id'})
diff --git a/base/php/test/inputs/json/misc/437e7.json/default/TopLevel.php b/head/php/test/inputs/json/misc/437e7.json/default/TopLevel.php
index 0d3ac25..024fe8c 100644
--- a/base/php/test/inputs/json/misc/437e7.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/437e7.json/default/TopLevel.php
@@ -202,6 +202,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pagination')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromMeta($obj->{'meta'})
@@ -1202,6 +1211,57 @@ class Datum {
      * @throws Exception
      */
     public static function from(stdClass $obj): Datum {
+        if (!property_exists($obj, 'bitly_gif_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bitly_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'content_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'embed_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'images')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'import_datetime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_indexable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rating')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'slug')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source_post_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source_tld')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trending_datetime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'username')) {
+            throw new Exception("Missing required property");
+        }
         return new Datum(
          Datum::fromBitlyGIFURL($obj->{'bitly_gif_url'})
         ,Datum::fromBitlyURL($obj->{'bitly_url'})
@@ -2448,6 +2508,72 @@ class Images {
      * @throws Exception
      */
     public static function from(stdClass $obj): Images {
+        if (!property_exists($obj, 'downsized')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_large')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_medium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_downsampled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_small_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_downsampled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_small_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'looping')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original_mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview_gif')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview_webp')) {
+            throw new Exception("Missing required property");
+        }
         return new Images(
          Images::fromDownsized($obj->{'downsized'})
         ,Images::fromDownsizedLarge($obj->{'downsized_large'})
@@ -2754,6 +2880,15 @@ class Downsized {
      * @throws Exception
      */
     public static function from(stdClass $obj): Downsized {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Downsized(
          Downsized::fromHeight($obj->{'height'})
         ,Downsized::fromSize($obj->{'size'})
@@ -3014,6 +3149,18 @@ class DownsizedSmall {
      * @throws Exception
      */
     public static function from(stdClass $obj): DownsizedSmall {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4_size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new DownsizedSmall(
          DownsizedSmall::fromHeight($obj->{'height'})
         ,DownsizedSmall::fromMp4($obj->{'mp4'})
@@ -3564,6 +3711,24 @@ class FixedHeight {
      * @throws Exception
      */
     public static function from(stdClass $obj): FixedHeight {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'webp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'webp_size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new FixedHeight(
          FixedHeight::fromFrames($obj->{'frames'})
         ,FixedHeight::fromHeight($obj->{'height'})
@@ -3730,6 +3895,12 @@ class Looping {
      * @throws Exception
      */
     public static function from(stdClass $obj): Looping {
+        if (!property_exists($obj, 'mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4_size')) {
+            throw new Exception("Missing required property");
+        }
         return new Looping(
          Looping::fromMp4($obj->{'mp4'})
         ,Looping::fromMp4Size($obj->{'mp4_size'})
@@ -4192,6 +4363,24 @@ class User {
      * @throws Exception
      */
     public static function from(stdClass $obj): User {
+        if (!property_exists($obj, 'avatar_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banner_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'display_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profile_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'twitter')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'username')) {
+            throw new Exception("Missing required property");
+        }
         return new User(
          User::fromAvatarURL($obj->{'avatar_url'})
         ,User::fromBannerURL($obj->{'banner_url'})
@@ -4404,6 +4593,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'msg')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'response_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromMsg($obj->{'msg'})
         ,Meta::fromResponseID($obj->{'response_id'})
@@ -4610,6 +4808,15 @@ class Pagination {
      * @throws Exception
      */
     public static function from(stdClass $obj): Pagination {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'offset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total_count')) {
+            throw new Exception("Missing required property");
+        }
         return new Pagination(
          Pagination::fromCount($obj->{'count'})
         ,Pagination::fromOffset($obj->{'offset'})
diff --git a/base/php/test/inputs/json/misc/43970.json/default/TopLevel.php b/head/php/test/inputs/json/misc/43970.json/default/TopLevel.php
index cf50782..4e50f81 100644
--- a/base/php/test/inputs/json/misc/43970.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/43970.json/default/TopLevel.php
@@ -188,6 +188,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'ID')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Notes')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromID($obj->{'ID'})
         ,TopLevel::fromName($obj->{'Name'})
diff --git a/base/php/test/inputs/json/misc/43eaf.json/default/TopLevel.php b/head/php/test/inputs/json/misc/43eaf.json/default/TopLevel.php
index e448140..212c6e1 100644
--- a/base/php/test/inputs/json/misc/43eaf.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/43eaf.json/default/TopLevel.php
@@ -205,6 +205,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'base')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rates')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBase($obj->{'base'})
         ,TopLevel::fromDate($obj->{'date'})
diff --git a/base/php/test/inputs/json/misc/458db.json/default/TopLevel.php b/head/php/test/inputs/json/misc/458db.json/default/TopLevel.php
index b77e616..d5f7180 100644
--- a/base/php/test/inputs/json/misc/458db.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/458db.json/default/TopLevel.php
@@ -149,6 +149,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'metadata')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromMetadata($obj->{'metadata'})
         ,TopLevel::fromResults($obj->{'results'})
@@ -355,6 +361,15 @@ class Metadata {
      * @throws Exception
      */
     public static function from(stdClass $obj): Metadata {
+        if (!property_exists($obj, 'executionTime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'responseInfo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'resultset')) {
+            throw new Exception("Missing required property");
+        }
         return new Metadata(
          Metadata::fromExecutionTime($obj->{'executionTime'})
         ,Metadata::fromResponseInfo($obj->{'responseInfo'})
@@ -509,6 +524,12 @@ class ResponseInfo {
      * @throws Exception
      */
     public static function from(stdClass $obj): ResponseInfo {
+        if (!property_exists($obj, 'developerMessage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
         return new ResponseInfo(
          ResponseInfo::fromDeveloperMessage($obj->{'developerMessage'})
         ,ResponseInfo::fromStatus($obj->{'status'})
@@ -713,6 +734,15 @@ class Resultset {
      * @throws Exception
      */
     public static function from(stdClass $obj): Resultset {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'page')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pagesize')) {
+            throw new Exception("Missing required property");
+        }
         return new Resultset(
          Resultset::fromCount($obj->{'count'})
         ,Resultset::fromPage($obj->{'page'})
@@ -1501,6 +1531,45 @@ class Result {
      * @throws Exception
      */
     public static function from(stdClass $obj): Result {
+        if (!property_exists($obj, 'attachments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'body')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'changed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'component')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'image')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'teaser')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'topic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uuid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'vuuid')) {
+            throw new Exception("Missing required property");
+        }
         return new Result(
          Result::fromAttachments($obj->{'attachments'})
         ,Result::fromBody($obj->{'body'})
@@ -1679,6 +1748,12 @@ class Component {
      * @throws Exception
      */
     public static function from(stdClass $obj): Component {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uuid')) {
+            throw new Exception("Missing required property");
+        }
         return new Component(
          Component::fromName($obj->{'name'})
         ,Component::fromUUID($obj->{'uuid'})
diff --git a/base/php/test/inputs/json/misc/4961a.json/default/TopLevel.php b/head/php/test/inputs/json/misc/4961a.json/default/TopLevel.php
index 3d4f5c7..e92c16a 100644
--- a/base/php/test/inputs/json/misc/4961a.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/4961a.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'total_population')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromTotalPopulation($obj->{'total_population'})
         );
@@ -246,6 +249,12 @@ class TotalPopulation {
      * @throws Exception
      */
     public static function from(stdClass $obj): TotalPopulation {
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'population')) {
+            throw new Exception("Missing required property");
+        }
         return new TotalPopulation(
          TotalPopulation::fromDate($obj->{'date'})
         ,TotalPopulation::fromPopulation($obj->{'population'})
diff --git a/base/php/test/inputs/json/misc/4a0d7.json/default/TopLevel.php b/head/php/test/inputs/json/misc/4a0d7.json/default/TopLevel.php
index 3d4f5c7..e92c16a 100644
--- a/base/php/test/inputs/json/misc/4a0d7.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/4a0d7.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'total_population')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromTotalPopulation($obj->{'total_population'})
         );
@@ -246,6 +249,12 @@ class TotalPopulation {
      * @throws Exception
      */
     public static function from(stdClass $obj): TotalPopulation {
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'population')) {
+            throw new Exception("Missing required property");
+        }
         return new TotalPopulation(
          TotalPopulation::fromDate($obj->{'date'})
         ,TotalPopulation::fromPopulation($obj->{'population'})
diff --git a/base/php/test/inputs/json/misc/4a455.json/default/TopLevel.php b/head/php/test/inputs/json/misc/4a455.json/default/TopLevel.php
index 70fd333..798b9ef 100644
--- a/base/php/test/inputs/json/misc/4a455.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/4a455.json/default/TopLevel.php
@@ -253,6 +253,18 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'crs')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'features')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'totalFeatures')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCRS($obj->{'crs'})
         ,TopLevel::fromFeatures($obj->{'features'})
@@ -410,6 +422,12 @@ class CRS {
      * @throws Exception
      */
     public static function from(stdClass $obj): CRS {
+        if (!property_exists($obj, 'properties')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new CRS(
          CRS::fromProperties($obj->{'properties'})
         ,CRS::fromType($obj->{'type'})
@@ -510,6 +528,9 @@ class CRSProperties {
      * @throws Exception
      */
     public static function from(stdClass $obj): CRSProperties {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new CRSProperties(
          CRSProperties::fromName($obj->{'name'})
         );
@@ -820,6 +841,21 @@ class Feature {
      * @throws Exception
      */
     public static function from(stdClass $obj): Feature {
+        if (!property_exists($obj, 'geometry')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'geometry_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'properties')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Feature(
          Feature::fromGeometry($obj->{'geometry'})
         ,Feature::fromGeometryName($obj->{'geometry_name'})
@@ -1004,6 +1040,12 @@ class Geometry {
      * @throws Exception
      */
     public static function from(stdClass $obj): Geometry {
+        if (!property_exists($obj, 'coordinates')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Geometry(
          Geometry::fromCoordinates($obj->{'coordinates'})
         ,Geometry::fromType($obj->{'type'})
@@ -1454,6 +1496,24 @@ class FeatureProperties {
      * @throws Exception
      */
     public static function from(stdClass $obj): FeatureProperties {
+        if (!property_exists($obj, 'facebookaccount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'frequencyfinderurl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'siteurl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'streetaddress')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'twitteraccount')) {
+            throw new Exception("Missing required property");
+        }
         return new FeatureProperties(
          FeatureProperties::fromFacebookaccount($obj->{'facebookaccount'})
         ,FeatureProperties::fromFrequencyfinderurl($obj->{'frequencyfinderurl'})
diff --git a/base/php/test/inputs/json/misc/4c547.json/default/TopLevel.php b/head/php/test/inputs/json/misc/4c547.json/default/TopLevel.php
index 94c8a8d..51996fe 100644
--- a/base/php/test/inputs/json/misc/4c547.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/4c547.json/default/TopLevel.php
@@ -85,6 +85,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'query')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromQuery($obj->{'query'})
         );
@@ -347,6 +350,18 @@ class Query {
      * @throws Exception
      */
     public static function from(stdClass $obj): Query {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lang')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new Query(
          Query::fromCount($obj->{'count'})
         ,Query::fromCreated($obj->{'created'})
@@ -452,6 +467,9 @@ class Results {
      * @throws Exception
      */
     public static function from(stdClass $obj): Results {
+        if (!property_exists($obj, 'channel')) {
+            throw new Exception("Missing required property");
+        }
         return new Results(
          Results::fromChannel($obj->{'channel'})
         );
@@ -1181,6 +1199,45 @@ class Channel {
      * @throws Exception
      */
     public static function from(stdClass $obj): Channel {
+        if (!property_exists($obj, 'astronomy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'atmosphere')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'image')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'language')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lastBuildDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'location')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ttl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'units')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Channel(
          Channel::fromAstronomy($obj->{'astronomy'})
         ,Channel::fromAtmosphere($obj->{'atmosphere'})
@@ -1355,6 +1412,12 @@ class Astronomy {
      * @throws Exception
      */
     public static function from(stdClass $obj): Astronomy {
+        if (!property_exists($obj, 'sunrise')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sunset')) {
+            throw new Exception("Missing required property");
+        }
         return new Astronomy(
          Astronomy::fromSunrise($obj->{'sunrise'})
         ,Astronomy::fromSunset($obj->{'sunset'})
@@ -1611,6 +1674,18 @@ class Atmosphere {
      * @throws Exception
      */
     public static function from(stdClass $obj): Atmosphere {
+        if (!property_exists($obj, 'humidity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rising')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
         return new Atmosphere(
          Atmosphere::fromHumidity($obj->{'humidity'})
         ,Atmosphere::fromPressure($obj->{'pressure'})
@@ -1923,6 +1998,21 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromHeight($obj->{'height'})
         ,Image::fromLink($obj->{'link'})
@@ -2459,6 +2549,33 @@ class Item {
      * @throws Exception
      */
     public static function from(stdClass $obj): Item {
+        if (!property_exists($obj, 'condition')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forecast')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'guid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'long')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pubDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
         return new Item(
          Item::fromCondition($obj->{'condition'})
         ,Item::fromDescription($obj->{'description'})
@@ -2729,6 +2846,18 @@ class Condition {
      * @throws Exception
      */
     public static function from(stdClass $obj): Condition {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Condition(
          Condition::fromCode($obj->{'code'})
         ,Condition::fromDate($obj->{'date'})
@@ -3093,6 +3222,24 @@ class Forecast {
      * @throws Exception
      */
     public static function from(stdClass $obj): Forecast {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'day')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'high')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'low')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Forecast(
          Forecast::fromCode($obj->{'code'})
         ,Forecast::fromDate($obj->{'date'})
@@ -3201,6 +3348,9 @@ class GUID {
      * @throws Exception
      */
     public static function from(stdClass $obj): GUID {
+        if (!property_exists($obj, 'isPermaLink')) {
+            throw new Exception("Missing required property");
+        }
         return new GUID(
          GUID::fromIsPermaLink($obj->{'isPermaLink'})
         );
@@ -3403,6 +3553,15 @@ class Location {
      * @throws Exception
      */
     public static function from(stdClass $obj): Location {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'region')) {
+            throw new Exception("Missing required property");
+        }
         return new Location(
          Location::fromCity($obj->{'city'})
         ,Location::fromCountry($obj->{'country'})
@@ -3661,6 +3820,18 @@ class Units {
      * @throws Exception
      */
     public static function from(stdClass $obj): Units {
+        if (!property_exists($obj, 'distance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temperature')) {
+            throw new Exception("Missing required property");
+        }
         return new Units(
          Units::fromDistance($obj->{'distance'})
         ,Units::fromPressure($obj->{'pressure'})
@@ -3869,6 +4040,15 @@ class Wind {
      * @throws Exception
      */
     public static function from(stdClass $obj): Wind {
+        if (!property_exists($obj, 'chill')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'direction')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
         return new Wind(
          Wind::fromChill($obj->{'chill'})
         ,Wind::fromDirection($obj->{'direction'})
diff --git a/base/php/test/inputs/json/misc/4d6fb.json/default/TopLevel.php b/head/php/test/inputs/json/misc/4d6fb.json/default/TopLevel.php
index 21f11e8..9175278 100644
--- a/base/php/test/inputs/json/misc/4d6fb.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/4d6fb.json/default/TopLevel.php
@@ -137,6 +137,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromKind($obj->{'kind'})
@@ -408,6 +414,18 @@ class TopLevelData {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevelData {
+        if (!property_exists($obj, 'after')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'before')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'children')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'modhash')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevelData(
          TopLevelData::fromAfter($obj->{'after'})
         ,TopLevelData::fromBefore($obj->{'before'})
@@ -566,6 +584,12 @@ class Child {
      * @throws Exception
      */
     public static function from(stdClass $obj): Child {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new Child(
          Child::fromData($obj->{'data'})
         ,Child::fromKind($obj->{'kind'})
@@ -4082,6 +4106,192 @@ class ChildData {
      * @throws Exception
      */
     public static function from(stdClass $obj): ChildData {
+        if (!property_exists($obj, 'approved_at_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'approved_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'archived')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author_flair_css_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author_flair_text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banned_at_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banned_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'brand_safe')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'can_gild')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'can_mod_post')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'clicked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'contest_mode')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'distinguished')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'domain')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downs')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'edited')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gilded')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hidden')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hide_score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_self')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_video')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'likes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link_flair_css_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link_flair_text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'media')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'media_embed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mod_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'over_18')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'permalink')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'quarantine')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'removal_reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'report_reasons')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'saved')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'secure_media')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'secure_media_embed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'selftext')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'selftext_html')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'spoiler')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stickied')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_name_prefixed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'suggested_sort')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_width')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ups')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'user_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'view_count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visited')) {
+            throw new Exception("Missing required property");
+        }
         return new ChildData(
          ChildData::fromApprovedAtUTC($obj->{'approved_at_utc'})
         ,ChildData::fromApprovedBy($obj->{'approved_by'})
@@ -4359,6 +4569,12 @@ class Media {
      * @throws Exception
      */
     public static function from(stdClass $obj): Media {
+        if (!property_exists($obj, 'oembed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Media(
          Media::fromOembed($obj->{'oembed'})
         ,Media::fromType($obj->{'type'})
@@ -5083,6 +5299,45 @@ class Oembed {
      * @throws Exception
      */
     public static function from(stdClass $obj): Oembed {
+        if (!property_exists($obj, 'author_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'html')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'provider_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'provider_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_width')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'version')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Oembed(
          Oembed::fromAuthorName($obj->{'author_name'})
         ,Oembed::fromAuthorURL($obj->{'author_url'})
@@ -5618,6 +5873,12 @@ class Preview {
      * @throws Exception
      */
     public static function from(stdClass $obj): Preview {
+        if (!property_exists($obj, 'enabled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'images')) {
+            throw new Exception("Missing required property");
+        }
         return new Preview(
          Preview::fromEnabled($obj->{'enabled'})
         ,Preview::fromImages($obj->{'images'})
@@ -5888,6 +6149,18 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'resolutions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'variants')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromID($obj->{'id'})
         ,Image::fromResolutions($obj->{'resolutions'})
@@ -6096,6 +6369,15 @@ class Source {
      * @throws Exception
      */
     public static function from(stdClass $obj): Source {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Source(
          Source::fromHeight($obj->{'height'})
         ,Source::fromURL($obj->{'url'})
diff --git a/base/php/test/inputs/json/misc/4e336.json/default/TopLevel.php b/head/php/test/inputs/json/misc/4e336.json/default/TopLevel.php
index 3d4f5c7..e92c16a 100644
--- a/base/php/test/inputs/json/misc/4e336.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/4e336.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'total_population')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromTotalPopulation($obj->{'total_population'})
         );
@@ -246,6 +249,12 @@ class TotalPopulation {
      * @throws Exception
      */
     public static function from(stdClass $obj): TotalPopulation {
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'population')) {
+            throw new Exception("Missing required property");
+        }
         return new TotalPopulation(
          TotalPopulation::fromDate($obj->{'date'})
         ,TotalPopulation::fromPopulation($obj->{'population'})
diff --git a/base/php/test/inputs/json/misc/54147.json/default/TopLevel.php b/head/php/test/inputs/json/misc/54147.json/default/TopLevel.php
index e3591c5..fa360a4 100644
--- a/base/php/test/inputs/json/misc/54147.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/54147.json/default/TopLevel.php
@@ -400,6 +400,27 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'args')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'files')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'form')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'headers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'origin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromArgs($obj->{'args'})
         ,TopLevel::fromData($obj->{'data'})
@@ -711,6 +732,18 @@ class Headers {
      * @throws Exception
      */
     public static function from(stdClass $obj): Headers {
+        if (!property_exists($obj, 'Accept-Encoding')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Connection')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Host')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'User-Agent')) {
+            throw new Exception("Missing required property");
+        }
         return new Headers(
          Headers::fromAcceptEncoding($obj->{'Accept-Encoding'})
         ,Headers::fromConnection($obj->{'Connection'})
diff --git a/base/php/test/inputs/json/misc/54d32.json/default/TopLevel.php b/head/php/test/inputs/json/misc/54d32.json/default/TopLevel.php
index 1dcc5f2..cba4e6d 100644
--- a/base/php/test/inputs/json/misc/54d32.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/54d32.json/default/TopLevel.php
@@ -409,6 +409,27 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'facets')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'limit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'next')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'offset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'previous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCount($obj->{'count'})
         ,TopLevel::fromFacets($obj->{'facets'})
@@ -839,6 +860,24 @@ class Result {
      * @throws Exception
      */
     public static function from(stdClass $obj): Result {
+        if (!property_exists($obj, 'created_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'person_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'representative_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated_at')) {
+            throw new Exception("Missing required property");
+        }
         return new Result(
          Result::fromCreatedAt($obj->{'created_at'})
         ,Result::fromID($obj->{'id'})
diff --git a/base/php/test/inputs/json/misc/570ec.json/default/TopLevel.php b/head/php/test/inputs/json/misc/570ec.json/default/TopLevel.php
index f08199a..0d1ab52 100644
--- a/base/php/test/inputs/json/misc/570ec.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/570ec.json/default/TopLevel.php
@@ -513,6 +513,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'identifiers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'keywords')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'links')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'other_names')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'superseded_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromID($obj->{'id'})
         ,TopLevel::fromIdentifiers($obj->{'identifiers'})
@@ -678,6 +702,12 @@ class Identifier {
      * @throws Exception
      */
     public static function from(stdClass $obj): Identifier {
+        if (!property_exists($obj, 'identifier')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scheme')) {
+            throw new Exception("Missing required property");
+        }
         return new Identifier(
          Identifier::fromIdentifier($obj->{'identifier'})
         ,Identifier::fromScheme($obj->{'scheme'})
@@ -883,6 +913,12 @@ class Link {
      * @throws Exception
      */
     public static function from(stdClass $obj): Link {
+        if (!property_exists($obj, 'note')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Link(
          Link::fromNote($obj->{'note'})
         ,Link::fromURL($obj->{'url'})
@@ -1045,6 +1081,12 @@ class OtherName {
      * @throws Exception
      */
     public static function from(stdClass $obj): OtherName {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'note')) {
+            throw new Exception("Missing required property");
+        }
         return new OtherName(
          OtherName::fromName($obj->{'name'})
         ,OtherName::fromNote($obj->{'note'})
@@ -1249,6 +1291,15 @@ class Text {
      * @throws Exception
      */
     public static function from(stdClass $obj): Text {
+        if (!property_exists($obj, 'media_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Text(
          Text::fromMediaType($obj->{'media_type'})
         ,Text::fromTitle($obj->{'title'})
diff --git a/base/php/test/inputs/json/misc/5dd0d.json/default/TopLevel.php b/head/php/test/inputs/json/misc/5dd0d.json/default/TopLevel.php
index 3a8b02e..d1cdcf2 100644
--- a/base/php/test/inputs/json/misc/5dd0d.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/5dd0d.json/default/TopLevel.php
@@ -450,6 +450,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'delay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'IATA')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ICAO')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCity($obj->{'city'})
         ,TopLevel::fromDelay($obj->{'delay'})
@@ -978,6 +1002,33 @@ class Status {
      * @throws Exception
      */
     public static function from(stdClass $obj): Status {
+        if (!property_exists($obj, 'avgDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureBegin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureEnd')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'endTime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'maxDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Status(
          Status::fromAvgDelay($obj->{'avgDelay'})
         ,Status::fromClosureBegin($obj->{'closureBegin'})
@@ -1301,6 +1352,21 @@ class Weather {
      * @throws Exception
      */
     public static function from(stdClass $obj): Weather {
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Weather(
          Weather::fromMeta($obj->{'meta'})
         ,Weather::fromTemp($obj->{'temp'})
@@ -1511,6 +1577,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'credit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromCredit($obj->{'credit'})
         ,Meta::fromUpdated($obj->{'updated'})
diff --git a/base/php/test/inputs/json/misc/5eae5.json/default/TopLevel.php b/head/php/test/inputs/json/misc/5eae5.json/default/TopLevel.php
index 2011eaf..337bb78 100644
--- a/base/php/test/inputs/json/misc/5eae5.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/5eae5.json/default/TopLevel.php
@@ -247,6 +247,18 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'Date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ID')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Sponsor')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Title')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromDate($obj->{'Date'})
         ,TopLevel::fromID($obj->{'ID'})
diff --git a/base/php/test/inputs/json/misc/5eb20.json/default/TopLevel.php b/head/php/test/inputs/json/misc/5eb20.json/default/TopLevel.php
index 3a8b02e..d1cdcf2 100644
--- a/base/php/test/inputs/json/misc/5eb20.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/5eb20.json/default/TopLevel.php
@@ -450,6 +450,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'delay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'IATA')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ICAO')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCity($obj->{'city'})
         ,TopLevel::fromDelay($obj->{'delay'})
@@ -978,6 +1002,33 @@ class Status {
      * @throws Exception
      */
     public static function from(stdClass $obj): Status {
+        if (!property_exists($obj, 'avgDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureBegin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureEnd')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'endTime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'maxDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Status(
          Status::fromAvgDelay($obj->{'avgDelay'})
         ,Status::fromClosureBegin($obj->{'closureBegin'})
@@ -1301,6 +1352,21 @@ class Weather {
      * @throws Exception
      */
     public static function from(stdClass $obj): Weather {
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Weather(
          Weather::fromMeta($obj->{'meta'})
         ,Weather::fromTemp($obj->{'temp'})
@@ -1511,6 +1577,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'credit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromCredit($obj->{'credit'})
         ,Meta::fromUpdated($obj->{'updated'})
diff --git a/base/php/test/inputs/json/misc/5f3a1.json/default/TopLevel.php b/head/php/test/inputs/json/misc/5f3a1.json/default/TopLevel.php
index e448140..212c6e1 100644
--- a/base/php/test/inputs/json/misc/5f3a1.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/5f3a1.json/default/TopLevel.php
@@ -205,6 +205,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'base')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rates')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBase($obj->{'base'})
         ,TopLevel::fromDate($obj->{'date'})
diff --git a/base/php/test/inputs/json/misc/5f7fe.json/default/TopLevel.php b/head/php/test/inputs/json/misc/5f7fe.json/default/TopLevel.php
index 1533e08..945f1a4 100644
--- a/base/php/test/inputs/json/misc/5f7fe.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/5f7fe.json/default/TopLevel.php
@@ -190,6 +190,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromMeta($obj->{'meta'})
@@ -291,6 +297,9 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'view')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromView($obj->{'view'})
         );
@@ -2383,6 +2392,120 @@ class View {
      * @throws Exception
      */
     public static function from(stdClass $obj): View {
+        if (!property_exists($obj, 'attribution')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'attributionLink')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'averageRating')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'category')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'columns')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'createdAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'displayType')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downloadCount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'grants')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hideFromCatalog')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hideFromDataJson')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'indexUpdatedAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locale')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'metadata')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'newBackend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'numberOfComments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'oid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'owner')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'provenance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationAppendEnabled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationGroup')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationStage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'query')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rights')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowsUpdatedAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowsUpdatedBy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tableAuthor')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tableId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'totalTimesRated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewCount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewLastModified')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewType')) {
+            throw new Exception("Missing required property");
+        }
         return new View(
          View::fromAttribution($obj->{'attribution'})
         ,View::fromAttributionLink($obj->{'attributionLink'})
@@ -3133,6 +3256,27 @@ class Column {
      * @throws Exception
      */
     public static function from(stdClass $obj): Column {
+        if (!property_exists($obj, 'dataTypeName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fieldName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'format')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'position')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'renderTypeName')) {
+            throw new Exception("Missing required property");
+        }
         return new Column(
          Column::fromCachedContents($obj->{'cachedContents'})
         ,Column::fromDataTypeName($obj->{'dataTypeName'})
@@ -3471,6 +3615,21 @@ class CachedContents {
      * @throws Exception
      */
     public static function from(stdClass $obj): CachedContents {
+        if (!property_exists($obj, 'largest')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'non_null')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'null')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'smallest')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'top')) {
+            throw new Exception("Missing required property");
+        }
         return new CachedContents(
          CachedContents::fromLargest($obj->{'largest'})
         ,CachedContents::fromNonNull($obj->{'non_null'})
@@ -3629,6 +3788,12 @@ class Top {
      * @throws Exception
      */
     public static function from(stdClass $obj): Top {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
         return new Top(
          Top::fromCount($obj->{'count'})
         ,Top::fromItem($obj->{'item'})
@@ -4072,6 +4237,15 @@ class Grant {
      * @throws Exception
      */
     public static function from(stdClass $obj): Grant {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'inherited')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Grant(
          Grant::fromFlags($obj->{'flags'})
         ,Grant::fromInherited($obj->{'inherited'})
@@ -4463,6 +4637,24 @@ class Metadata {
      * @throws Exception
      */
     public static function from(stdClass $obj): Metadata {
+        if (!property_exists($obj, 'attachments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'availableDisplayTypes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'custom_fields')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'jsonQuery')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rdfSubject')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'renderTypeConfig')) {
+            throw new Exception("Missing required property");
+        }
         return new Metadata(
          Metadata::fromAttachments($obj->{'attachments'})
         ,Metadata::fromAvailableDisplayTypes($obj->{'availableDisplayTypes'})
@@ -4727,6 +4919,18 @@ class Attachment {
      * @throws Exception
      */
     public static function from(stdClass $obj): Attachment {
+        if (!property_exists($obj, 'assetId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'blobId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'filename')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new Attachment(
          Attachment::fromAssetID($obj->{'assetId'})
         ,Attachment::fromBlobID($obj->{'blobId'})
@@ -5044,6 +5248,21 @@ class CustomFields {
      * @throws Exception
      */
     public static function from(stdClass $obj): CustomFields {
+        if (!property_exists($obj, 'Additional Resources')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Common Core')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Dataset Information')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Dataset Summary')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Notes')) {
+            throw new Exception("Missing required property");
+        }
         return new CustomFields(
          CustomFields::fromAdditionalResources($obj->{'Additional Resources'})
         ,CustomFields::fromCommonCore($obj->{'Common Core'})
@@ -5202,6 +5421,12 @@ class AdditionalResources {
      * @throws Exception
      */
     public static function from(stdClass $obj): AdditionalResources {
+        if (!property_exists($obj, 'See Also ')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'See Also')) {
+            throw new Exception("Missing required property");
+        }
         return new AdditionalResources(
          AdditionalResources::fromAdditionalResourcesSeeAlso($obj->{'See Also '})
         ,AdditionalResources::fromSeeAlso($obj->{'See Also'})
@@ -5406,6 +5631,15 @@ class CommonCore {
      * @throws Exception
      */
     public static function from(stdClass $obj): CommonCore {
+        if (!property_exists($obj, 'Contact Email')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Contact Name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Publisher')) {
+            throw new Exception("Missing required property");
+        }
         return new CommonCore(
          CommonCore::fromContactEmail($obj->{'Contact Email'})
         ,CommonCore::fromContactName($obj->{'Contact Name'})
@@ -5508,6 +5742,9 @@ class DatasetInformation {
      * @throws Exception
      */
     public static function from(stdClass $obj): DatasetInformation {
+        if (!property_exists($obj, 'Agency')) {
+            throw new Exception("Missing required property");
+        }
         return new DatasetInformation(
          DatasetInformation::fromAgency($obj->{'Agency'})
         );
@@ -6022,6 +6259,33 @@ class DatasetSummary {
      * @throws Exception
      */
     public static function from(stdClass $obj): DatasetSummary {
+        if (!property_exists($obj, 'Contact Information')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Coverage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Data Frequency')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Dataset Owner')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Granularity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Organization')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Posting Frequency')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Time Period')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Units')) {
+            throw new Exception("Missing required property");
+        }
         return new DatasetSummary(
          DatasetSummary::fromContactInformation($obj->{'Contact Information'})
         ,DatasetSummary::fromCoverage($obj->{'Coverage'})
@@ -6136,6 +6400,9 @@ class Notes {
      * @throws Exception
      */
     public static function from(stdClass $obj): Notes {
+        if (!property_exists($obj, 'Notes')) {
+            throw new Exception("Missing required property");
+        }
         return new Notes(
          Notes::fromNotes($obj->{'Notes'})
         );
@@ -6246,6 +6513,9 @@ class JSONQuery {
      * @throws Exception
      */
     public static function from(stdClass $obj): JSONQuery {
+        if (!property_exists($obj, 'order')) {
+            throw new Exception("Missing required property");
+        }
         return new JSONQuery(
          JSONQuery::fromOrder($obj->{'order'})
         );
@@ -6396,6 +6666,12 @@ class Order {
      * @throws Exception
      */
     public static function from(stdClass $obj): Order {
+        if (!property_exists($obj, 'ascending')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'columnFieldName')) {
+            throw new Exception("Missing required property");
+        }
         return new Order(
          Order::fromAscending($obj->{'ascending'})
         ,Order::fromColumnFieldName($obj->{'columnFieldName'})
@@ -6497,6 +6773,9 @@ class RenderTypeConfig {
      * @throws Exception
      */
     public static function from(stdClass $obj): RenderTypeConfig {
+        if (!property_exists($obj, 'visible')) {
+            throw new Exception("Missing required property");
+        }
         return new RenderTypeConfig(
          RenderTypeConfig::fromVisible($obj->{'visible'})
         );
@@ -6595,6 +6874,9 @@ class Visible {
      * @throws Exception
      */
     public static function from(stdClass $obj): Visible {
+        if (!property_exists($obj, 'table')) {
+            throw new Exception("Missing required property");
+        }
         return new Visible(
          Visible::fromTable($obj->{'table'})
         );
@@ -7071,6 +7353,30 @@ class Owner {
      * @throws Exception
      */
     public static function from(stdClass $obj): Owner {
+        if (!property_exists($obj, 'displayName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profileImageUrlLarge')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profileImageUrlMedium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profileImageUrlSmall')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rights')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'roleName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'screenName')) {
+            throw new Exception("Missing required property");
+        }
         return new Owner(
          Owner::fromDisplayName($obj->{'displayName'})
         ,Owner::fromID($obj->{'id'})
@@ -7195,6 +7501,9 @@ class Query {
      * @throws Exception
      */
     public static function from(stdClass $obj): Query {
+        if (!property_exists($obj, 'orderBys')) {
+            throw new Exception("Missing required property");
+        }
         return new Query(
          Query::fromOrderBys($obj->{'orderBys'})
         );
@@ -7346,6 +7655,12 @@ class OrderBy {
      * @throws Exception
      */
     public static function from(stdClass $obj): OrderBy {
+        if (!property_exists($obj, 'ascending')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'expression')) {
+            throw new Exception("Missing required property");
+        }
         return new OrderBy(
          OrderBy::fromAscending($obj->{'ascending'})
         ,OrderBy::fromExpression($obj->{'expression'})
@@ -7498,6 +7813,12 @@ class Expression {
      * @throws Exception
      */
     public static function from(stdClass $obj): Expression {
+        if (!property_exists($obj, 'columnId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Expression(
          Expression::fromColumnID($obj->{'columnId'})
         ,Expression::fromType($obj->{'type'})
diff --git a/base/php/test/inputs/json/misc/617e8.json/default/TopLevel.php b/head/php/test/inputs/json/misc/617e8.json/default/TopLevel.php
index 44f43fb..9ca4bb8 100644
--- a/base/php/test/inputs/json/misc/617e8.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/617e8.json/default/TopLevel.php
@@ -190,6 +190,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromMeta($obj->{'meta'})
@@ -291,6 +297,9 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'view')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromView($obj->{'view'})
         );
@@ -2383,6 +2392,120 @@ class View {
      * @throws Exception
      */
     public static function from(stdClass $obj): View {
+        if (!property_exists($obj, 'attribution')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'attributionLink')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'averageRating')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'category')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'columns')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'createdAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'displayType')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downloadCount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'grants')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hideFromCatalog')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hideFromDataJson')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'indexUpdatedAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locale')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'metadata')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'newBackend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'numberOfComments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'oid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'owner')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'provenance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationAppendEnabled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationGroup')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationStage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'query')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rights')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowsUpdatedAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowsUpdatedBy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tableAuthor')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tableId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'totalTimesRated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewCount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewLastModified')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewType')) {
+            throw new Exception("Missing required property");
+        }
         return new View(
          View::fromAttribution($obj->{'attribution'})
         ,View::fromAttributionLink($obj->{'attributionLink'})
@@ -3195,6 +3318,27 @@ class Column {
      * @throws Exception
      */
     public static function from(stdClass $obj): Column {
+        if (!property_exists($obj, 'dataTypeName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fieldName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'format')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'position')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'renderTypeName')) {
+            throw new Exception("Missing required property");
+        }
         return new Column(
          Column::fromCachedContents($obj->{'cachedContents'})
         ,Column::fromDataTypeName($obj->{'dataTypeName'})
@@ -3535,6 +3679,21 @@ class CachedContents {
      * @throws Exception
      */
     public static function from(stdClass $obj): CachedContents {
+        if (!property_exists($obj, 'largest')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'non_null')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'null')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'smallest')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'top')) {
+            throw new Exception("Missing required property");
+        }
         return new CachedContents(
          CachedContents::fromLargest($obj->{'largest'})
         ,CachedContents::fromNonNull($obj->{'non_null'})
@@ -3693,6 +3852,12 @@ class Top {
      * @throws Exception
      */
     public static function from(stdClass $obj): Top {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
         return new Top(
          Top::fromCount($obj->{'count'})
         ,Top::fromItem($obj->{'item'})
@@ -4136,6 +4301,15 @@ class Grant {
      * @throws Exception
      */
     public static function from(stdClass $obj): Grant {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'inherited')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Grant(
          Grant::fromFlags($obj->{'flags'})
         ,Grant::fromInherited($obj->{'inherited'})
@@ -4527,6 +4701,24 @@ class Metadata {
      * @throws Exception
      */
     public static function from(stdClass $obj): Metadata {
+        if (!property_exists($obj, 'attachments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'availableDisplayTypes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'custom_fields')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'jsonQuery')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rdfSubject')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'renderTypeConfig')) {
+            throw new Exception("Missing required property");
+        }
         return new Metadata(
          Metadata::fromAttachments($obj->{'attachments'})
         ,Metadata::fromAvailableDisplayTypes($obj->{'availableDisplayTypes'})
@@ -4791,6 +4983,18 @@ class Attachment {
      * @throws Exception
      */
     public static function from(stdClass $obj): Attachment {
+        if (!property_exists($obj, 'assetId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'blobId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'filename')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new Attachment(
          Attachment::fromAssetID($obj->{'assetId'})
         ,Attachment::fromBlobID($obj->{'blobId'})
@@ -5108,6 +5312,21 @@ class CustomFields {
      * @throws Exception
      */
     public static function from(stdClass $obj): CustomFields {
+        if (!property_exists($obj, 'Additional Resources')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Common Core')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Dataset Information')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Dataset Summary')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Notes')) {
+            throw new Exception("Missing required property");
+        }
         return new CustomFields(
          CustomFields::fromAdditionalResources($obj->{'Additional Resources'})
         ,CustomFields::fromCommonCore($obj->{'Common Core'})
@@ -5214,6 +5433,9 @@ class AdditionalResources {
      * @throws Exception
      */
     public static function from(stdClass $obj): AdditionalResources {
+        if (!property_exists($obj, 'See Also')) {
+            throw new Exception("Missing required property");
+        }
         return new AdditionalResources(
          AdditionalResources::fromSeeAlso($obj->{'See Also'})
         );
@@ -5416,6 +5638,15 @@ class CommonCore {
      * @throws Exception
      */
     public static function from(stdClass $obj): CommonCore {
+        if (!property_exists($obj, 'Contact Email')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Contact Name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Publisher')) {
+            throw new Exception("Missing required property");
+        }
         return new CommonCore(
          CommonCore::fromContactEmail($obj->{'Contact Email'})
         ,CommonCore::fromContactName($obj->{'Contact Name'})
@@ -5518,6 +5749,9 @@ class DatasetInformation {
      * @throws Exception
      */
     public static function from(stdClass $obj): DatasetInformation {
+        if (!property_exists($obj, 'Agency')) {
+            throw new Exception("Missing required property");
+        }
         return new DatasetInformation(
          DatasetInformation::fromAgency($obj->{'Agency'})
         );
@@ -5980,6 +6214,30 @@ class DatasetSummary {
      * @throws Exception
      */
     public static function from(stdClass $obj): DatasetSummary {
+        if (!property_exists($obj, 'Contact Information')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Coverage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Data Frequency')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Dataset Owner')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Granularity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Organization')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Posting Frequency')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Time Period')) {
+            throw new Exception("Missing required property");
+        }
         return new DatasetSummary(
          DatasetSummary::fromContactInformation($obj->{'Contact Information'})
         ,DatasetSummary::fromCoverage($obj->{'Coverage'})
@@ -6092,6 +6350,9 @@ class Notes {
      * @throws Exception
      */
     public static function from(stdClass $obj): Notes {
+        if (!property_exists($obj, 'Notes')) {
+            throw new Exception("Missing required property");
+        }
         return new Notes(
          Notes::fromNotes($obj->{'Notes'})
         );
@@ -6202,6 +6463,9 @@ class JSONQuery {
      * @throws Exception
      */
     public static function from(stdClass $obj): JSONQuery {
+        if (!property_exists($obj, 'order')) {
+            throw new Exception("Missing required property");
+        }
         return new JSONQuery(
          JSONQuery::fromOrder($obj->{'order'})
         );
@@ -6352,6 +6616,12 @@ class Order {
      * @throws Exception
      */
     public static function from(stdClass $obj): Order {
+        if (!property_exists($obj, 'ascending')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'columnFieldName')) {
+            throw new Exception("Missing required property");
+        }
         return new Order(
          Order::fromAscending($obj->{'ascending'})
         ,Order::fromColumnFieldName($obj->{'columnFieldName'})
@@ -6453,6 +6723,9 @@ class RenderTypeConfig {
      * @throws Exception
      */
     public static function from(stdClass $obj): RenderTypeConfig {
+        if (!property_exists($obj, 'visible')) {
+            throw new Exception("Missing required property");
+        }
         return new RenderTypeConfig(
          RenderTypeConfig::fromVisible($obj->{'visible'})
         );
@@ -6551,6 +6824,9 @@ class Visible {
      * @throws Exception
      */
     public static function from(stdClass $obj): Visible {
+        if (!property_exists($obj, 'table')) {
+            throw new Exception("Missing required property");
+        }
         return new Visible(
          Visible::fromTable($obj->{'table'})
         );
@@ -7027,6 +7303,30 @@ class Owner {
      * @throws Exception
      */
     public static function from(stdClass $obj): Owner {
+        if (!property_exists($obj, 'displayName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profileImageUrlLarge')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profileImageUrlMedium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profileImageUrlSmall')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rights')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'roleName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'screenName')) {
+            throw new Exception("Missing required property");
+        }
         return new Owner(
          Owner::fromDisplayName($obj->{'displayName'})
         ,Owner::fromID($obj->{'id'})
@@ -7151,6 +7451,9 @@ class Query {
      * @throws Exception
      */
     public static function from(stdClass $obj): Query {
+        if (!property_exists($obj, 'orderBys')) {
+            throw new Exception("Missing required property");
+        }
         return new Query(
          Query::fromOrderBys($obj->{'orderBys'})
         );
@@ -7302,6 +7605,12 @@ class OrderBy {
      * @throws Exception
      */
     public static function from(stdClass $obj): OrderBy {
+        if (!property_exists($obj, 'ascending')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'expression')) {
+            throw new Exception("Missing required property");
+        }
         return new OrderBy(
          OrderBy::fromAscending($obj->{'ascending'})
         ,OrderBy::fromExpression($obj->{'expression'})
@@ -7454,6 +7763,12 @@ class Expression {
      * @throws Exception
      */
     public static function from(stdClass $obj): Expression {
+        if (!property_exists($obj, 'columnId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Expression(
          Expression::fromColumnID($obj->{'columnId'})
         ,Expression::fromType($obj->{'type'})
diff --git a/base/php/test/inputs/json/misc/61b66.json/default/TopLevel.php b/head/php/test/inputs/json/misc/61b66.json/default/TopLevel.php
index 3a8b02e..d1cdcf2 100644
--- a/base/php/test/inputs/json/misc/61b66.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/61b66.json/default/TopLevel.php
@@ -450,6 +450,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'delay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'IATA')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ICAO')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCity($obj->{'city'})
         ,TopLevel::fromDelay($obj->{'delay'})
@@ -978,6 +1002,33 @@ class Status {
      * @throws Exception
      */
     public static function from(stdClass $obj): Status {
+        if (!property_exists($obj, 'avgDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureBegin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureEnd')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'endTime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'maxDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Status(
          Status::fromAvgDelay($obj->{'avgDelay'})
         ,Status::fromClosureBegin($obj->{'closureBegin'})
@@ -1301,6 +1352,21 @@ class Weather {
      * @throws Exception
      */
     public static function from(stdClass $obj): Weather {
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Weather(
          Weather::fromMeta($obj->{'meta'})
         ,Weather::fromTemp($obj->{'temp'})
@@ -1511,6 +1577,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'credit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromCredit($obj->{'credit'})
         ,Meta::fromUpdated($obj->{'updated'})
diff --git a/base/php/test/inputs/json/misc/6260a.json/default/TopLevel.php b/head/php/test/inputs/json/misc/6260a.json/default/TopLevel.php
index e448140..212c6e1 100644
--- a/base/php/test/inputs/json/misc/6260a.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/6260a.json/default/TopLevel.php
@@ -205,6 +205,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'base')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rates')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBase($obj->{'base'})
         ,TopLevel::fromDate($obj->{'date'})
diff --git a/base/php/test/inputs/json/misc/65dec.json/default/TopLevel.php b/head/php/test/inputs/json/misc/65dec.json/default/TopLevel.php
index e158521..eff01e2 100644
--- a/base/php/test/inputs/json/misc/65dec.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/65dec.json/default/TopLevel.php
@@ -630,6 +630,39 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'booster')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'border')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cards')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gathererCode')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'magicCardsInfoCode')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mkm_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mkm_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'releaseDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBooster($obj->{'booster'})
         ,TopLevel::fromBorder($obj->{'border'})
@@ -2411,6 +2444,48 @@ class Card {
      * @throws Exception
      */
     public static function from(stdClass $obj): Card {
+        if (!property_exists($obj, 'artist')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cmc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'imageName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'layout')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'legalities')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'multiverseid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'originalText')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'originalType')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'printings')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rarity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'types')) {
+            throw new Exception("Missing required property");
+        }
         return new Card(
          Card::fromArtist($obj->{'artist'})
         ,Card::fromCmc($obj->{'cmc'})
@@ -2783,6 +2858,12 @@ class LegalityElement {
      * @throws Exception
      */
     public static function from(stdClass $obj): LegalityElement {
+        if (!property_exists($obj, 'format')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'legality')) {
+            throw new Exception("Missing required property");
+        }
         return new LegalityElement(
          LegalityElement::fromFormat($obj->{'format'})
         ,LegalityElement::fromLegality($obj->{'legality'})
@@ -3045,6 +3126,12 @@ class Ruling {
      * @throws Exception
      */
     public static function from(stdClass $obj): Ruling {
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Ruling(
          Ruling::fromDate($obj->{'date'})
         ,Ruling::fromText($obj->{'text'})
diff --git a/base/php/test/inputs/json/misc/66121.json/default/TopLevel.php b/head/php/test/inputs/json/misc/66121.json/default/TopLevel.php
index cce870b..4a87f28 100644
--- a/base/php/test/inputs/json/misc/66121.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/66121.json/default/TopLevel.php
@@ -517,6 +517,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'identifiers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'keywords')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'links')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'other_names')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'superseded_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromID($obj->{'id'})
         ,TopLevel::fromIdentifiers($obj->{'identifiers'})
@@ -682,6 +706,12 @@ class Identifier {
      * @throws Exception
      */
     public static function from(stdClass $obj): Identifier {
+        if (!property_exists($obj, 'identifier')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scheme')) {
+            throw new Exception("Missing required property");
+        }
         return new Identifier(
          Identifier::fromIdentifier($obj->{'identifier'})
         ,Identifier::fromScheme($obj->{'scheme'})
@@ -941,6 +971,12 @@ class Link {
      * @throws Exception
      */
     public static function from(stdClass $obj): Link {
+        if (!property_exists($obj, 'note')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Link(
          Link::fromNote($obj->{'note'})
         ,Link::fromURL($obj->{'url'})
@@ -1192,6 +1228,15 @@ class Text {
      * @throws Exception
      */
     public static function from(stdClass $obj): Text {
+        if (!property_exists($obj, 'media_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Text(
          Text::fromMediaType($obj->{'media_type'})
         ,Text::fromTitle($obj->{'title'})
diff --git a/base/php/test/inputs/json/misc/6617c.json/default/TopLevel.php b/head/php/test/inputs/json/misc/6617c.json/default/TopLevel.php
index ee26d5b..03faf59 100644
--- a/base/php/test/inputs/json/misc/6617c.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/6617c.json/default/TopLevel.php
@@ -189,6 +189,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'iss_position')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'message')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'timestamp')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromIssPosition($obj->{'iss_position'})
         ,TopLevel::fromMessage($obj->{'message'})
@@ -343,6 +352,12 @@ class IssPosition {
      * @throws Exception
      */
     public static function from(stdClass $obj): IssPosition {
+        if (!property_exists($obj, 'latitude')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'longitude')) {
+            throw new Exception("Missing required property");
+        }
         return new IssPosition(
          IssPosition::fromLatitude($obj->{'latitude'})
         ,IssPosition::fromLongitude($obj->{'longitude'})
diff --git a/base/php/test/inputs/json/misc/67c03.json/default/TopLevel.php b/head/php/test/inputs/json/misc/67c03.json/default/TopLevel.php
index b99bc03..9179d00 100644
--- a/base/php/test/inputs/json/misc/67c03.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/67c03.json/default/TopLevel.php
@@ -200,6 +200,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'message')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'number')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'people')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromMessage($obj->{'message'})
         ,TopLevel::fromNumber($obj->{'number'})
@@ -354,6 +363,12 @@ class Person {
      * @throws Exception
      */
     public static function from(stdClass $obj): Person {
+        if (!property_exists($obj, 'craft')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new Person(
          Person::fromCraft($obj->{'craft'})
         ,Person::fromName($obj->{'name'})
diff --git a/base/php/test/inputs/json/misc/68c30.json/default/TopLevel.php b/head/php/test/inputs/json/misc/68c30.json/default/TopLevel.php
index 85b4acc..fae4157 100644
--- a/base/php/test/inputs/json/misc/68c30.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/68c30.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'txs')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromTxs($obj->{'txs'})
         );
@@ -790,6 +793,42 @@ class Tx {
      * @throws Exception
      */
     public static function from(stdClass $obj): Tx {
+        if (!property_exists($obj, 'double_spend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hash')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'inputs')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lock_time')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'out')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'relayed_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'time')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tx_index')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ver')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'vin_sz')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'vout_sz')) {
+            throw new Exception("Missing required property");
+        }
         return new Tx(
          Tx::fromDoubleSpend($obj->{'double_spend'})
         ,Tx::fromHash($obj->{'hash'})
@@ -1015,6 +1054,15 @@ class Input {
      * @throws Exception
      */
     public static function from(stdClass $obj): Input {
+        if (!property_exists($obj, 'prev_out')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'script')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sequence')) {
+            throw new Exception("Missing required property");
+        }
         return new Input(
          Input::fromPrevOut($obj->{'prev_out'})
         ,Input::fromScript($obj->{'script'})
@@ -1429,6 +1477,27 @@ class Out {
      * @throws Exception
      */
     public static function from(stdClass $obj): Out {
+        if (!property_exists($obj, 'addr')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'n')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'script')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'spent')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tx_index')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'value')) {
+            throw new Exception("Missing required property");
+        }
         return new Out(
          Out::fromAddr($obj->{'addr'})
         ,Out::fromN($obj->{'n'})
diff --git a/base/php/test/inputs/json/misc/6c155.json/default/TopLevel.php b/head/php/test/inputs/json/misc/6c155.json/default/TopLevel.php
index c8b566b..b207169 100644
--- a/base/php/test/inputs/json/misc/6c155.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/6c155.json/default/TopLevel.php
@@ -149,6 +149,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'metadata')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromMetadata($obj->{'metadata'})
         ,TopLevel::fromResults($obj->{'results'})
@@ -355,6 +361,15 @@ class Metadata {
      * @throws Exception
      */
     public static function from(stdClass $obj): Metadata {
+        if (!property_exists($obj, 'executionTime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'responseInfo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'resultset')) {
+            throw new Exception("Missing required property");
+        }
         return new Metadata(
          Metadata::fromExecutionTime($obj->{'executionTime'})
         ,Metadata::fromResponseInfo($obj->{'responseInfo'})
@@ -509,6 +524,12 @@ class ResponseInfo {
      * @throws Exception
      */
     public static function from(stdClass $obj): ResponseInfo {
+        if (!property_exists($obj, 'developerMessage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
         return new ResponseInfo(
          ResponseInfo::fromDeveloperMessage($obj->{'developerMessage'})
         ,ResponseInfo::fromStatus($obj->{'status'})
@@ -713,6 +734,15 @@ class Resultset {
      * @throws Exception
      */
     public static function from(stdClass $obj): Resultset {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'page')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pagesize')) {
+            throw new Exception("Missing required property");
+        }
         return new Resultset(
          Resultset::fromCount($obj->{'count'})
         ,Resultset::fromPage($obj->{'page'})
@@ -1546,6 +1576,48 @@ class Result {
      * @throws Exception
      */
     public static function from(stdClass $obj): Result {
+        if (!property_exists($obj, 'attachment')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'body')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'changed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'component')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'image')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'location')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'teaser')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'topic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uuid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'vuuid')) {
+            throw new Exception("Missing required property");
+        }
         return new Result(
          Result::fromAttachment($obj->{'attachment'})
         ,Result::fromBody($obj->{'body'})
@@ -1725,6 +1797,12 @@ class Component {
      * @throws Exception
      */
     public static function from(stdClass $obj): Component {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uuid')) {
+            throw new Exception("Missing required property");
+        }
         return new Component(
          Component::fromName($obj->{'name'})
         ,Component::fromUUID($obj->{'uuid'})
@@ -2296,6 +2374,36 @@ class Location {
      * @throws Exception
      */
     public static function from(stdClass $obj): Location {
+        if (!property_exists($obj, 'administrative_area')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fax_number')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locality')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mobile_number')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'phone_number')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'phone_number_extension')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'postal_code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sub_premise')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thoroughfare')) {
+            throw new Exception("Missing required property");
+        }
         return new Location(
          Location::fromAdministrativeArea($obj->{'administrative_area'})
         ,Location::fromCountry($obj->{'country'})
diff --git a/base/php/test/inputs/json/misc/6de06.json/default/TopLevel.php b/head/php/test/inputs/json/misc/6de06.json/default/TopLevel.php
index 6c26587..24627ad 100644
--- a/base/php/test/inputs/json/misc/6de06.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/6de06.json/default/TopLevel.php
@@ -137,6 +137,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromKind($obj->{'kind'})
@@ -408,6 +414,18 @@ class TopLevelData {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevelData {
+        if (!property_exists($obj, 'after')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'before')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'children')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'modhash')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevelData(
          TopLevelData::fromAfter($obj->{'after'})
         ,TopLevelData::fromBefore($obj->{'before'})
@@ -566,6 +584,12 @@ class Child {
      * @throws Exception
      */
     public static function from(stdClass $obj): Child {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new Child(
          Child::fromData($obj->{'data'})
         ,Child::fromKind($obj->{'kind'})
@@ -4121,6 +4145,192 @@ class ChildData {
      * @throws Exception
      */
     public static function from(stdClass $obj): ChildData {
+        if (!property_exists($obj, 'approved_at_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'approved_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'archived')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author_flair_css_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author_flair_text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banned_at_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banned_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'brand_safe')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'can_gild')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'can_mod_post')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'clicked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'contest_mode')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'distinguished')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'domain')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downs')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'edited')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gilded')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hidden')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hide_score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_self')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_video')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'likes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link_flair_css_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link_flair_text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'media')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'media_embed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mod_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'over_18')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'permalink')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'quarantine')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'removal_reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'report_reasons')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'saved')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'secure_media')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'secure_media_embed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'selftext')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'selftext_html')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'spoiler')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stickied')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_name_prefixed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'suggested_sort')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_width')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ups')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'user_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'view_count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visited')) {
+            throw new Exception("Missing required property");
+        }
         return new ChildData(
          ChildData::fromApprovedAtUTC($obj->{'approved_at_utc'})
         ,ChildData::fromApprovedBy($obj->{'approved_by'})
@@ -4398,6 +4608,12 @@ class Media {
      * @throws Exception
      */
     public static function from(stdClass $obj): Media {
+        if (!property_exists($obj, 'oembed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Media(
          Media::fromOembed($obj->{'oembed'})
         ,Media::fromType($obj->{'type'})
@@ -5070,6 +5286,42 @@ class Oembed {
      * @throws Exception
      */
     public static function from(stdClass $obj): Oembed {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'html')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'provider_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'provider_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_width')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'version')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Oembed(
          Oembed::fromDescription($obj->{'description'})
         ,Oembed::fromHeight($obj->{'height'})
@@ -5607,6 +5859,12 @@ class Preview {
      * @throws Exception
      */
     public static function from(stdClass $obj): Preview {
+        if (!property_exists($obj, 'enabled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'images')) {
+            throw new Exception("Missing required property");
+        }
         return new Preview(
          Preview::fromEnabled($obj->{'enabled'})
         ,Preview::fromImages($obj->{'images'})
@@ -5877,6 +6135,18 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'resolutions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'variants')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromID($obj->{'id'})
         ,Image::fromResolutions($obj->{'resolutions'})
@@ -6085,6 +6355,15 @@ class Source {
      * @throws Exception
      */
     public static function from(stdClass $obj): Source {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Source(
          Source::fromHeight($obj->{'height'})
         ,Source::fromURL($obj->{'url'})
@@ -6556,6 +6835,12 @@ class GIF {
      * @throws Exception
      */
     public static function from(stdClass $obj): GIF {
+        if (!property_exists($obj, 'resolutions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
         return new GIF(
          GIF::fromResolutions($obj->{'resolutions'})
         ,GIF::fromSource($obj->{'source'})
diff --git a/base/php/test/inputs/json/misc/6dec6.json/default/TopLevel.php b/head/php/test/inputs/json/misc/6dec6.json/default/TopLevel.php
index a863b4b..ca38755 100644
--- a/base/php/test/inputs/json/misc/6dec6.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/6dec6.json/default/TopLevel.php
@@ -85,6 +85,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'query')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromQuery($obj->{'query'})
         );
@@ -347,6 +350,18 @@ class Query {
      * @throws Exception
      */
     public static function from(stdClass $obj): Query {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lang')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new Query(
          Query::fromCount($obj->{'count'})
         ,Query::fromCreated($obj->{'created'})
@@ -452,6 +467,9 @@ class Results {
      * @throws Exception
      */
     public static function from(stdClass $obj): Results {
+        if (!property_exists($obj, 'channel')) {
+            throw new Exception("Missing required property");
+        }
         return new Results(
          Results::fromChannel($obj->{'channel'})
         );
@@ -1181,6 +1199,45 @@ class Channel {
      * @throws Exception
      */
     public static function from(stdClass $obj): Channel {
+        if (!property_exists($obj, 'astronomy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'atmosphere')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'image')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'language')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lastBuildDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'location')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ttl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'units')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Channel(
          Channel::fromAstronomy($obj->{'astronomy'})
         ,Channel::fromAtmosphere($obj->{'atmosphere'})
@@ -1355,6 +1412,12 @@ class Astronomy {
      * @throws Exception
      */
     public static function from(stdClass $obj): Astronomy {
+        if (!property_exists($obj, 'sunrise')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sunset')) {
+            throw new Exception("Missing required property");
+        }
         return new Astronomy(
          Astronomy::fromSunrise($obj->{'sunrise'})
         ,Astronomy::fromSunset($obj->{'sunset'})
@@ -1611,6 +1674,18 @@ class Atmosphere {
      * @throws Exception
      */
     public static function from(stdClass $obj): Atmosphere {
+        if (!property_exists($obj, 'humidity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rising')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
         return new Atmosphere(
          Atmosphere::fromHumidity($obj->{'humidity'})
         ,Atmosphere::fromPressure($obj->{'pressure'})
@@ -1923,6 +1998,21 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromHeight($obj->{'height'})
         ,Image::fromLink($obj->{'link'})
@@ -2459,6 +2549,33 @@ class Item {
      * @throws Exception
      */
     public static function from(stdClass $obj): Item {
+        if (!property_exists($obj, 'condition')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forecast')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'guid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'long')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pubDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
         return new Item(
          Item::fromCondition($obj->{'condition'})
         ,Item::fromDescription($obj->{'description'})
@@ -2729,6 +2846,18 @@ class Condition {
      * @throws Exception
      */
     public static function from(stdClass $obj): Condition {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Condition(
          Condition::fromCode($obj->{'code'})
         ,Condition::fromDate($obj->{'date'})
@@ -3094,6 +3223,24 @@ class Forecast {
      * @throws Exception
      */
     public static function from(stdClass $obj): Forecast {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'day')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'high')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'low')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Forecast(
          Forecast::fromCode($obj->{'code'})
         ,Forecast::fromDate($obj->{'date'})
@@ -3255,6 +3402,9 @@ class GUID {
      * @throws Exception
      */
     public static function from(stdClass $obj): GUID {
+        if (!property_exists($obj, 'isPermaLink')) {
+            throw new Exception("Missing required property");
+        }
         return new GUID(
          GUID::fromIsPermaLink($obj->{'isPermaLink'})
         );
@@ -3457,6 +3607,15 @@ class Location {
      * @throws Exception
      */
     public static function from(stdClass $obj): Location {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'region')) {
+            throw new Exception("Missing required property");
+        }
         return new Location(
          Location::fromCity($obj->{'city'})
         ,Location::fromCountry($obj->{'country'})
@@ -3715,6 +3874,18 @@ class Units {
      * @throws Exception
      */
     public static function from(stdClass $obj): Units {
+        if (!property_exists($obj, 'distance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temperature')) {
+            throw new Exception("Missing required property");
+        }
         return new Units(
          Units::fromDistance($obj->{'distance'})
         ,Units::fromPressure($obj->{'pressure'})
@@ -3923,6 +4094,15 @@ class Wind {
      * @throws Exception
      */
     public static function from(stdClass $obj): Wind {
+        if (!property_exists($obj, 'chill')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'direction')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
         return new Wind(
          Wind::fromChill($obj->{'chill'})
         ,Wind::fromDirection($obj->{'direction'})
diff --git a/base/php/test/inputs/json/misc/6eb00.json/default/TopLevel.php b/head/php/test/inputs/json/misc/6eb00.json/default/TopLevel.php
index 8d38941..6e4f9f4 100644
--- a/base/php/test/inputs/json/misc/6eb00.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/6eb00.json/default/TopLevel.php
@@ -188,6 +188,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'DirectorateID')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Name')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromDirectorateID($obj->{'DirectorateID'})
         ,TopLevel::fromID($obj->{'Id'})
diff --git a/base/php/test/inputs/json/misc/70c77.json/default/TopLevel.php b/head/php/test/inputs/json/misc/70c77.json/default/TopLevel.php
index e448140..212c6e1 100644
--- a/base/php/test/inputs/json/misc/70c77.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/70c77.json/default/TopLevel.php
@@ -205,6 +205,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'base')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rates')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBase($obj->{'base'})
         ,TopLevel::fromDate($obj->{'date'})
diff --git a/base/php/test/inputs/json/misc/734ad.json/default/TopLevel.php b/head/php/test/inputs/json/misc/734ad.json/default/TopLevel.php
index 0b179ea..988a1ff 100644
--- a/base/php/test/inputs/json/misc/734ad.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/734ad.json/default/TopLevel.php
@@ -409,6 +409,27 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'facets')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'limit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'next')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'offset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'previous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCount($obj->{'count'})
         ,TopLevel::fromFacets($obj->{'facets'})
@@ -3780,6 +3801,156 @@ class Result {
      * @throws Exception
      */
     public static function from(stdClass $obj): Result {
+        if (!property_exists($obj, 'acronym')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'activity_consult_committees')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'activity_eu_legislative')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'activity_expert_groups')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'activity_high_level_groups')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'activity_industry_forums')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'activity_inter_groups')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'activity_other')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'activity_relevant_comm')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'code_of_conduct')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'contact_country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'entity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'goals')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'head')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'head_office_country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'head_office_lat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'head_office_lon')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'head_office_phone')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'head_office_post_code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'head_office_postbox')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'head_office_street')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'head_office_town')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'identification_code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'info_members')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'last_update_date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'legal')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'legal_status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'main_category')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'main_category_title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'members')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'members_100')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'members_25')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'members_50')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'members_75')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'members_fte')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'native_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'networking')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'number_of_natural_persons')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'other_code_of_conduct')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'registration_date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'structure_members')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sub_category')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sub_category_title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uri')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'web_site_url')) {
+            throw new Exception("Missing required property");
+        }
         return new Result(
          Result::fromAcronym($obj->{'acronym'})
         ,Result::fromActivityConsultCommittees($obj->{'activity_consult_committees'})
diff --git a/base/php/test/inputs/json/misc/75912.json/default/TopLevel.php b/head/php/test/inputs/json/misc/75912.json/default/TopLevel.php
index e448140..212c6e1 100644
--- a/base/php/test/inputs/json/misc/75912.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/75912.json/default/TopLevel.php
@@ -205,6 +205,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'base')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rates')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBase($obj->{'base'})
         ,TopLevel::fromDate($obj->{'date'})
diff --git a/base/php/test/inputs/json/misc/7681c.json/default/TopLevel.php b/head/php/test/inputs/json/misc/7681c.json/default/TopLevel.php
index 6359e27..221a5f2 100644
--- a/base/php/test/inputs/json/misc/7681c.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/7681c.json/default/TopLevel.php
@@ -202,6 +202,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pagination')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromMeta($obj->{'meta'})
@@ -1203,6 +1212,57 @@ class Datum {
      * @throws Exception
      */
     public static function from(stdClass $obj): Datum {
+        if (!property_exists($obj, 'bitly_gif_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bitly_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'content_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'embed_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'images')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'import_datetime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_indexable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rating')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'slug')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source_post_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source_tld')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trending_datetime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'username')) {
+            throw new Exception("Missing required property");
+        }
         return new Datum(
          Datum::fromBitlyGIFURL($obj->{'bitly_gif_url'})
         ,Datum::fromBitlyURL($obj->{'bitly_url'})
@@ -2512,6 +2572,72 @@ class Images {
      * @throws Exception
      */
     public static function from(stdClass $obj): Images {
+        if (!property_exists($obj, 'downsized')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_large')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_medium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_downsampled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_small_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_downsampled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_small_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'looping')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original_mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview_gif')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview_webp')) {
+            throw new Exception("Missing required property");
+        }
         return new Images(
          Images::fromDownsized($obj->{'downsized'})
         ,Images::fromDownsizedLarge($obj->{'downsized_large'})
@@ -2820,6 +2946,15 @@ class Downsized {
      * @throws Exception
      */
     public static function from(stdClass $obj): Downsized {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Downsized(
          Downsized::fromHeight($obj->{'height'})
         ,Downsized::fromSize($obj->{'size'})
@@ -3080,6 +3215,18 @@ class DownsizedSmall {
      * @throws Exception
      */
     public static function from(stdClass $obj): DownsizedSmall {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4_size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new DownsizedSmall(
          DownsizedSmall::fromHeight($obj->{'height'})
         ,DownsizedSmall::fromMp4($obj->{'mp4'})
@@ -3692,6 +3839,24 @@ class FixedHeight {
      * @throws Exception
      */
     public static function from(stdClass $obj): FixedHeight {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'webp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'webp_size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new FixedHeight(
          FixedHeight::fromFrames($obj->{'frames'})
         ,FixedHeight::fromHash($obj->{'hash'})
@@ -3860,6 +4025,12 @@ class Looping {
      * @throws Exception
      */
     public static function from(stdClass $obj): Looping {
+        if (!property_exists($obj, 'mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4_size')) {
+            throw new Exception("Missing required property");
+        }
         return new Looping(
          Looping::fromMp4($obj->{'mp4'})
         ,Looping::fromMp4Size($obj->{'mp4_size'})
@@ -4328,6 +4499,21 @@ class User {
      * @throws Exception
      */
     public static function from(stdClass $obj): User {
+        if (!property_exists($obj, 'avatar_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banner_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'display_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profile_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'username')) {
+            throw new Exception("Missing required property");
+        }
         return new User(
          User::fromAvatarURL($obj->{'avatar_url'})
         ,User::fromBannerURL($obj->{'banner_url'})
@@ -4597,6 +4783,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'msg')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'response_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromMsg($obj->{'msg'})
         ,Meta::fromResponseID($obj->{'response_id'})
@@ -4803,6 +4998,15 @@ class Pagination {
      * @throws Exception
      */
     public static function from(stdClass $obj): Pagination {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'offset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total_count')) {
+            throw new Exception("Missing required property");
+        }
         return new Pagination(
          Pagination::fromCount($obj->{'count'})
         ,Pagination::fromOffset($obj->{'offset'})
diff --git a/base/php/test/inputs/json/misc/76ae1.json/default/TopLevel.php b/head/php/test/inputs/json/misc/76ae1.json/default/TopLevel.php
index 8c06ce6..33f024d 100644
--- a/base/php/test/inputs/json/misc/76ae1.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/76ae1.json/default/TopLevel.php
@@ -479,6 +479,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'basePath')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'definitions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'host')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'info')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'paths')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'produces')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'schemes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'swagger')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBasePath($obj->{'basePath'})
         ,TopLevel::fromDefinitions($obj->{'definitions'})
@@ -1228,6 +1252,45 @@ class Definitions {
      * @throws Exception
      */
     public static function from(stdClass $obj): Definitions {
+        if (!property_exists($obj, 'Article')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Center')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'DeMinimis')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Event')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'FAQ')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Lead')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'List')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'MarketIntelligence')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Office')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Provider')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Rate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Report')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Taxonomy')) {
+            throw new Exception("Missing required property");
+        }
         return new Definitions(
          Definitions::fromArticle($obj->{'Article'})
         ,Definitions::fromCenter($obj->{'Center'})
@@ -1365,6 +1428,9 @@ class Article {
      * @throws Exception
      */
     public static function from(stdClass $obj): Article {
+        if (!property_exists($obj, 'properties')) {
+            throw new Exception("Missing required property");
+        }
         return new Article(
          Article::fromProperties($obj->{'properties'})
         );
@@ -1516,6 +1582,12 @@ class Property {
      * @throws Exception
      */
     public static function from(stdClass $obj): Property {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Property(
          Property::fromDescription($obj->{'description'})
         ,Property::fromType($obj->{'type'})
@@ -1662,6 +1734,9 @@ class DeMinimis {
      * @throws Exception
      */
     public static function from(stdClass $obj): DeMinimis {
+        if (!property_exists($obj, 'properties')) {
+            throw new Exception("Missing required property");
+        }
         return new DeMinimis(
          DeMinimis::fromProperties($obj->{'properties'})
         );
@@ -2079,6 +2154,27 @@ class DeMinimisProperties {
      * @throws Exception
      */
     public static function from(stdClass $obj): DeMinimisProperties {
+        if (!property_exists($obj, 'countries')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'de_minimis_currency')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'de_minimis_value')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'notes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'vat_amount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'vat_currency')) {
+            throw new Exception("Missing required property");
+        }
         return new DeMinimisProperties(
          DeMinimisProperties::fromCountries($obj->{'countries'})
         ,DeMinimisProperties::fromCountry($obj->{'country'})
@@ -2190,6 +2286,9 @@ class FAQ {
      * @throws Exception
      */
     public static function from(stdClass $obj): FAQ {
+        if (!property_exists($obj, 'properties')) {
+            throw new Exception("Missing required property");
+        }
         return new FAQ(
          FAQ::fromProperties($obj->{'properties'})
         );
@@ -2819,6 +2918,39 @@ class FAQProperties {
      * @throws Exception
      */
     public static function from(stdClass $obj): FAQProperties {
+        if (!property_exists($obj, 'answer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'countries')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'first_published_date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'industries')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'last_published_date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'question')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'topics')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trade_regions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'world_regions')) {
+            throw new Exception("Missing required property");
+        }
         return new FAQProperties(
          FAQProperties::fromAnswer($obj->{'answer'})
         ,FAQProperties::fromCountries($obj->{'countries'})
@@ -2938,6 +3070,9 @@ class Report {
      * @throws Exception
      */
     public static function from(stdClass $obj): Report {
+        if (!property_exists($obj, 'properties')) {
+            throw new Exception("Missing required property");
+        }
         return new Report(
          Report::fromProperties($obj->{'properties'})
         );
@@ -3461,6 +3596,33 @@ class ReportProperties {
      * @throws Exception
      */
     public static function from(stdClass $obj): ReportProperties {
+        if (!property_exists($obj, 'countries')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'expiration_date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'industries')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ita_industries')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'report_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new ReportProperties(
          ReportProperties::fromCountries($obj->{'countries'})
         ,ReportProperties::fromDescription($obj->{'description'})
@@ -3576,6 +3738,9 @@ class Taxonomy {
      * @throws Exception
      */
     public static function from(stdClass $obj): Taxonomy {
+        if (!property_exists($obj, 'properties')) {
+            throw new Exception("Missing required property");
+        }
         return new Taxonomy(
          Taxonomy::fromProperties($obj->{'properties'})
         );
@@ -3940,6 +4105,24 @@ class TaxonomyProperties {
      * @throws Exception
      */
     public static function from(stdClass $obj): TaxonomyProperties {
+        if (!property_exists($obj, 'annotations')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'datatype_properties')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'label')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sub_class_of')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new TaxonomyProperties(
          TaxonomyProperties::fromAnnotations($obj->{'annotations'})
         ,TaxonomyProperties::fromDatatypeProperties($obj->{'datatype_properties'})
@@ -4152,6 +4335,15 @@ class Info {
      * @throws Exception
      */
     public static function from(stdClass $obj): Info {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'version')) {
+            throw new Exception("Missing required property");
+        }
         return new Info(
          Info::fromDescription($obj->{'description'})
         ,Info::fromTitle($obj->{'title'})
@@ -4891,6 +5083,45 @@ class Paths {
      * @throws Exception
      */
     public static function from(stdClass $obj): Paths {
+        if (!property_exists($obj, '/business_service_providers/search')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '/consolidated_screening_list/search')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '/de_minimis/search')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '/ita_faqs/search')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '/ita_office_locations/search')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '/ita_taxonomies/search')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '/ita_zipcode_to_post/search')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '/market_intelligence/search')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '/market_research_library/search')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '/tariff_rates/search')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '/trade_articles/search')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '/trade_events/search')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '/trade_leads/search')) {
+            throw new Exception("Missing required property");
+        }
         return new Paths(
          Paths::fromBusinessServiceProvidersSearch($obj->{'/business_service_providers/search'})
         ,Paths::fromConsolidatedScreeningListSearch($obj->{'/consolidated_screening_list/search'})
@@ -5014,6 +5245,9 @@ class BusinessServiceProvidersSearchClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): BusinessServiceProvidersSearchClass {
+        if (!property_exists($obj, 'get')) {
+            throw new Exception("Missing required property");
+        }
         return new BusinessServiceProvidersSearchClass(
          BusinessServiceProvidersSearchClass::fromGet($obj->{'get'})
         );
@@ -5347,6 +5581,21 @@ class BusinessServiceProvidersSearchGet {
      * @throws Exception
      */
     public static function from(stdClass $obj): BusinessServiceProvidersSearchGet {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'parameters')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'responses')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'summary')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tags')) {
+            throw new Exception("Missing required property");
+        }
         return new BusinessServiceProvidersSearchGet(
          BusinessServiceProvidersSearchGet::fromDescription($obj->{'description'})
         ,BusinessServiceProvidersSearchGet::fromParameters($obj->{'parameters'})
@@ -5716,6 +5965,24 @@ class Parameter {
      * @throws Exception
      */
     public static function from(stdClass $obj): Parameter {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'format')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'in')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'required')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Parameter(
          Parameter::fromDescription($obj->{'description'})
         ,Parameter::fromFormat($obj->{'format'})
@@ -5870,6 +6137,9 @@ class PurpleResponses {
      * @throws Exception
      */
     public static function from(stdClass $obj): PurpleResponses {
+        if (!property_exists($obj, '200')) {
+            throw new Exception("Missing required property");
+        }
         return new PurpleResponses(
          PurpleResponses::fromThe200($obj->{'200'})
         );
@@ -6021,6 +6291,12 @@ class Purple200 {
      * @throws Exception
      */
     public static function from(stdClass $obj): Purple200 {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'schema')) {
+            throw new Exception("Missing required property");
+        }
         return new Purple200(
          Purple200::fromDescription($obj->{'description'})
         ,Purple200::fromSchema($obj->{'schema'})
@@ -6121,6 +6397,9 @@ class ItemsClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ItemsClass {
+        if (!property_exists($obj, '$ref')) {
+            throw new Exception("Missing required property");
+        }
         return new ItemsClass(
          ItemsClass::fromRef($obj->{'$ref'})
         );
@@ -6220,6 +6499,9 @@ class ConsolidatedScreeningListSearchClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ConsolidatedScreeningListSearchClass {
+        if (!property_exists($obj, 'get')) {
+            throw new Exception("Missing required property");
+        }
         return new ConsolidatedScreeningListSearchClass(
          ConsolidatedScreeningListSearchClass::fromGet($obj->{'get'})
         );
@@ -6553,6 +6835,21 @@ class ConsolidatedScreeningListSearchGet {
      * @throws Exception
      */
     public static function from(stdClass $obj): ConsolidatedScreeningListSearchGet {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'parameters')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'responses')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'summary')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tags')) {
+            throw new Exception("Missing required property");
+        }
         return new ConsolidatedScreeningListSearchGet(
          ConsolidatedScreeningListSearchGet::fromDescription($obj->{'description'})
         ,ConsolidatedScreeningListSearchGet::fromParameters($obj->{'parameters'})
@@ -6660,6 +6957,9 @@ class FluffyResponses {
      * @throws Exception
      */
     public static function from(stdClass $obj): FluffyResponses {
+        if (!property_exists($obj, '200')) {
+            throw new Exception("Missing required property");
+        }
         return new FluffyResponses(
          FluffyResponses::fromThe200($obj->{'200'})
         );
@@ -6811,6 +7111,12 @@ class Fluffy200 {
      * @throws Exception
      */
     public static function from(stdClass $obj): Fluffy200 {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'schema')) {
+            throw new Exception("Missing required property");
+        }
         return new Fluffy200(
          Fluffy200::fromDescription($obj->{'description'})
         ,Fluffy200::fromSchema($obj->{'schema'})
@@ -6965,6 +7271,12 @@ class PurpleSchema {
      * @throws Exception
      */
     public static function from(stdClass $obj): PurpleSchema {
+        if (!property_exists($obj, 'items')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new PurpleSchema(
          PurpleSchema::fromItems($obj->{'items'})
         ,PurpleSchema::fromType($obj->{'type'})
diff --git a/base/php/test/inputs/json/misc/77392.json/default/TopLevel.php b/head/php/test/inputs/json/misc/77392.json/default/TopLevel.php
index d67ff98..c25b83c 100644
--- a/base/php/test/inputs/json/misc/77392.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/77392.json/default/TopLevel.php
@@ -591,6 +591,27 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'designation')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'discovery_date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'i_deg')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'moid_au')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'orbit_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pha')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'q_au_1')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromDesignation($obj->{'designation'})
         ,TopLevel::fromDiscoveryDate($obj->{'discovery_date'})
diff --git a/base/php/test/inputs/json/misc/7d397.json/default/TopLevel.php b/head/php/test/inputs/json/misc/7d397.json/default/TopLevel.php
index 682e573..472a4c3 100644
--- a/base/php/test/inputs/json/misc/7d397.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/7d397.json/default/TopLevel.php
@@ -479,6 +479,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'basePath')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'definitions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'host')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'info')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'paths')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'produces')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'schemes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'swagger')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBasePath($obj->{'basePath'})
         ,TopLevel::fromDefinitions($obj->{'definitions'})
@@ -592,6 +616,9 @@ class Definitions {
      * @throws Exception
      */
     public static function from(stdClass $obj): Definitions {
+        if (!property_exists($obj, 'List')) {
+            throw new Exception("Missing required property");
+        }
         return new Definitions(
          Definitions::fromList($obj->{'List'})
         );
@@ -705,6 +732,9 @@ class ListClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ListClass {
+        if (!property_exists($obj, 'properties')) {
+            throw new Exception("Missing required property");
+        }
         return new ListClass(
          ListClass::fromProperties($obj->{'properties'})
         );
@@ -856,6 +886,12 @@ class Property {
      * @throws Exception
      */
     public static function from(stdClass $obj): Property {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Property(
          Property::fromDescription($obj->{'description'})
         ,Property::fromType($obj->{'type'})
@@ -1105,6 +1141,15 @@ class Info {
      * @throws Exception
      */
     public static function from(stdClass $obj): Info {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'version')) {
+            throw new Exception("Missing required property");
+        }
         return new Info(
          Info::fromDescription($obj->{'description'})
         ,Info::fromTitle($obj->{'title'})
@@ -1208,6 +1253,9 @@ class Paths {
      * @throws Exception
      */
     public static function from(stdClass $obj): Paths {
+        if (!property_exists($obj, '/consolidated_screening_list/search')) {
+            throw new Exception("Missing required property");
+        }
         return new Paths(
          Paths::fromConsolidatedScreeningListSearch($obj->{'/consolidated_screening_list/search'})
         );
@@ -1307,6 +1355,9 @@ class ConsolidatedScreeningListSearch {
      * @throws Exception
      */
     public static function from(stdClass $obj): ConsolidatedScreeningListSearch {
+        if (!property_exists($obj, 'get')) {
+            throw new Exception("Missing required property");
+        }
         return new ConsolidatedScreeningListSearch(
          ConsolidatedScreeningListSearch::fromGet($obj->{'get'})
         );
@@ -1640,6 +1691,21 @@ class Get {
      * @throws Exception
      */
     public static function from(stdClass $obj): Get {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'parameters')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'responses')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'summary')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tags')) {
+            throw new Exception("Missing required property");
+        }
         return new Get(
          Get::fromDescription($obj->{'description'})
         ,Get::fromParameters($obj->{'parameters'})
@@ -2009,6 +2075,24 @@ class Parameter {
      * @throws Exception
      */
     public static function from(stdClass $obj): Parameter {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'format')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'in')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'required')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Parameter(
          Parameter::fromDescription($obj->{'description'})
         ,Parameter::fromFormat($obj->{'format'})
@@ -2163,6 +2247,9 @@ class Responses {
      * @throws Exception
      */
     public static function from(stdClass $obj): Responses {
+        if (!property_exists($obj, '200')) {
+            throw new Exception("Missing required property");
+        }
         return new Responses(
          Responses::fromThe200($obj->{'200'})
         );
@@ -2314,6 +2401,12 @@ class The200 {
      * @throws Exception
      */
     public static function from(stdClass $obj): The200 {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'schema')) {
+            throw new Exception("Missing required property");
+        }
         return new The200(
          The200::fromDescription($obj->{'description'})
         ,The200::fromSchema($obj->{'schema'})
@@ -2467,6 +2560,12 @@ class Schema {
      * @throws Exception
      */
     public static function from(stdClass $obj): Schema {
+        if (!property_exists($obj, 'items')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Schema(
          Schema::fromItems($obj->{'items'})
         ,Schema::fromType($obj->{'type'})
@@ -2567,6 +2666,9 @@ class Items {
      * @throws Exception
      */
     public static function from(stdClass $obj): Items {
+        if (!property_exists($obj, '$ref')) {
+            throw new Exception("Missing required property");
+        }
         return new Items(
          Items::fromRef($obj->{'$ref'})
         );
diff --git a/base/php/test/inputs/json/misc/7d722.json/default/TopLevel.php b/head/php/test/inputs/json/misc/7d722.json/default/TopLevel.php
index 3a8b02e..d1cdcf2 100644
--- a/base/php/test/inputs/json/misc/7d722.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/7d722.json/default/TopLevel.php
@@ -450,6 +450,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'delay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'IATA')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ICAO')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCity($obj->{'city'})
         ,TopLevel::fromDelay($obj->{'delay'})
@@ -978,6 +1002,33 @@ class Status {
      * @throws Exception
      */
     public static function from(stdClass $obj): Status {
+        if (!property_exists($obj, 'avgDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureBegin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureEnd')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'endTime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'maxDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Status(
          Status::fromAvgDelay($obj->{'avgDelay'})
         ,Status::fromClosureBegin($obj->{'closureBegin'})
@@ -1301,6 +1352,21 @@ class Weather {
      * @throws Exception
      */
     public static function from(stdClass $obj): Weather {
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Weather(
          Weather::fromMeta($obj->{'meta'})
         ,Weather::fromTemp($obj->{'temp'})
@@ -1511,6 +1577,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'credit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromCredit($obj->{'credit'})
         ,Meta::fromUpdated($obj->{'updated'})
diff --git a/base/php/test/inputs/json/misc/7df41.json/default/TopLevel.php b/head/php/test/inputs/json/misc/7df41.json/default/TopLevel.php
index 2355097..3d94010 100644
--- a/base/php/test/inputs/json/misc/7df41.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/7df41.json/default/TopLevel.php
@@ -297,6 +297,21 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'pc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ps3')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ps4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'xbox')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'xone')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromPC($obj->{'pc'})
         ,TopLevel::fromPs3($obj->{'ps3'})
@@ -507,6 +522,15 @@ class PC {
      * @throws Exception
      */
     public static function from(stdClass $obj): PC {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'label')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'peak24')) {
+            throw new Exception("Missing required property");
+        }
         return new PC(
          PC::fromCount($obj->{'count'})
         ,PC::fromLabel($obj->{'label'})
diff --git a/base/php/test/inputs/json/misc/7dfa6.json/default/TopLevel.php b/head/php/test/inputs/json/misc/7dfa6.json/default/TopLevel.php
index 3d4f5c7..e92c16a 100644
--- a/base/php/test/inputs/json/misc/7dfa6.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/7dfa6.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'total_population')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromTotalPopulation($obj->{'total_population'})
         );
@@ -246,6 +249,12 @@ class TotalPopulation {
      * @throws Exception
      */
     public static function from(stdClass $obj): TotalPopulation {
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'population')) {
+            throw new Exception("Missing required property");
+        }
         return new TotalPopulation(
          TotalPopulation::fromDate($obj->{'date'})
         ,TotalPopulation::fromPopulation($obj->{'population'})
diff --git a/base/php/test/inputs/json/misc/7eb30.json/default/TopLevel.php b/head/php/test/inputs/json/misc/7eb30.json/default/TopLevel.php
index db997c4..b915521 100644
--- a/base/php/test/inputs/json/misc/7eb30.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/7eb30.json/default/TopLevel.php
@@ -255,6 +255,18 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'next')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'previous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCount($obj->{'count'})
         ,TopLevel::fromNext($obj->{'next'})
@@ -1038,6 +1050,48 @@ class Result {
      * @throws Exception
      */
     public static function from(stdClass $obj): Result {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'english')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fav')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'group')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'location')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'min_screens')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_views')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'showtimes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stars')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tel')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thai')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'today_screens')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'website')) {
+            throw new Exception("Missing required property");
+        }
         return new Result(
          Result::fromCode($obj->{'code'})
         ,Result::fromEnglish($obj->{'english'})
@@ -1321,6 +1375,18 @@ class Group {
      * @throws Exception
      */
     public static function from(stdClass $obj): Group {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'english')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thai')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'website')) {
+            throw new Exception("Missing required property");
+        }
         return new Group(
          Group::fromCode($obj->{'code'})
         ,Group::fromEnglish($obj->{'english'})
diff --git a/base/php/test/inputs/json/misc/7f568.json/default/TopLevel.php b/head/php/test/inputs/json/misc/7f568.json/default/TopLevel.php
index 0e2b928..82ed5f2 100644
--- a/base/php/test/inputs/json/misc/7f568.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/7f568.json/default/TopLevel.php
@@ -906,6 +906,54 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'comments_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'commits_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'files')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forks_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'git_pull_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'git_push_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'html_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'public')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'truncated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'user')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromComments($obj->{'comments'})
         ,TopLevel::fromCommentsURL($obj->{'comments_url'})
@@ -1254,6 +1302,21 @@ class File {
      * @throws Exception
      */
     public static function from(stdClass $obj): File {
+        if (!property_exists($obj, 'filename')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'language')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'raw_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new File(
          File::fromFilename($obj->{'filename'})
         ,File::fromLanguage($obj->{'language'})
diff --git a/base/php/test/inputs/json/misc/80aff.json/default/TopLevel.php b/head/php/test/inputs/json/misc/80aff.json/default/TopLevel.php
index 5cc9f6e..a541ca5 100644
--- a/base/php/test/inputs/json/misc/80aff.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/80aff.json/default/TopLevel.php
@@ -409,6 +409,27 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'facets')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'limit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'next')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'offset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'previous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCount($obj->{'count'})
         ,TopLevel::fromFacets($obj->{'facets'})
@@ -900,6 +921,27 @@ class Result {
      * @throws Exception
      */
     public static function from(stdClass $obj): Result {
+        if (!property_exists($obj, 'created_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'items')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'parent')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uri')) {
+            throw new Exception("Missing required property");
+        }
         return new Result(
          Result::fromCreatedAt($obj->{'created_at'})
         ,Result::fromID($obj->{'id'})
diff --git a/base/php/test/inputs/json/misc/82509.json/default/TopLevel.php b/head/php/test/inputs/json/misc/82509.json/default/TopLevel.php
index 9d59a94..20c526a 100644
--- a/base/php/test/inputs/json/misc/82509.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/82509.json/default/TopLevel.php
@@ -84,6 +84,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'origin')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromOrigin($obj->{'origin'})
         );
diff --git a/base/php/test/inputs/json/misc/8592b.json/default/TopLevel.php b/head/php/test/inputs/json/misc/8592b.json/default/TopLevel.php
index c83e70f..6d20976 100644
--- a/base/php/test/inputs/json/misc/8592b.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/8592b.json/default/TopLevel.php
@@ -137,6 +137,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromKind($obj->{'kind'})
@@ -408,6 +414,18 @@ class TopLevelData {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevelData {
+        if (!property_exists($obj, 'after')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'before')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'children')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'modhash')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevelData(
          TopLevelData::fromAfter($obj->{'after'})
         ,TopLevelData::fromBefore($obj->{'before'})
@@ -566,6 +584,12 @@ class Child {
      * @throws Exception
      */
     public static function from(stdClass $obj): Child {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new Child(
          Child::fromData($obj->{'data'})
         ,Child::fromKind($obj->{'kind'})
@@ -4079,6 +4103,192 @@ class ChildData {
      * @throws Exception
      */
     public static function from(stdClass $obj): ChildData {
+        if (!property_exists($obj, 'approved_at_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'approved_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'archived')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author_flair_css_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author_flair_text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banned_at_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banned_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'brand_safe')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'can_gild')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'can_mod_post')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'clicked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'contest_mode')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'distinguished')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'domain')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downs')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'edited')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gilded')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hidden')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hide_score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_self')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_video')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'likes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link_flair_css_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link_flair_text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'media')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'media_embed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mod_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'over_18')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'permalink')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'quarantine')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'removal_reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'report_reasons')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'saved')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'secure_media')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'secure_media_embed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'selftext')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'selftext_html')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'spoiler')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stickied')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_name_prefixed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'suggested_sort')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_width')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ups')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'user_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'view_count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visited')) {
+            throw new Exception("Missing required property");
+        }
         return new ChildData(
          ChildData::fromApprovedAtUTC($obj->{'approved_at_utc'})
         ,ChildData::fromApprovedBy($obj->{'approved_by'})
@@ -4457,6 +4667,12 @@ class Preview {
      * @throws Exception
      */
     public static function from(stdClass $obj): Preview {
+        if (!property_exists($obj, 'enabled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'images')) {
+            throw new Exception("Missing required property");
+        }
         return new Preview(
          Preview::fromEnabled($obj->{'enabled'})
         ,Preview::fromImages($obj->{'images'})
@@ -4727,6 +4943,18 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'resolutions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'variants')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromID($obj->{'id'})
         ,Image::fromResolutions($obj->{'resolutions'})
@@ -4935,6 +5163,15 @@ class Source {
      * @throws Exception
      */
     public static function from(stdClass $obj): Source {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Source(
          Source::fromHeight($obj->{'height'})
         ,Source::fromURL($obj->{'url'})
diff --git a/base/php/test/inputs/json/misc/88130.json/default/TopLevel.php b/head/php/test/inputs/json/misc/88130.json/default/TopLevel.php
index 94c8a8d..51996fe 100644
--- a/base/php/test/inputs/json/misc/88130.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/88130.json/default/TopLevel.php
@@ -85,6 +85,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'query')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromQuery($obj->{'query'})
         );
@@ -347,6 +350,18 @@ class Query {
      * @throws Exception
      */
     public static function from(stdClass $obj): Query {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lang')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new Query(
          Query::fromCount($obj->{'count'})
         ,Query::fromCreated($obj->{'created'})
@@ -452,6 +467,9 @@ class Results {
      * @throws Exception
      */
     public static function from(stdClass $obj): Results {
+        if (!property_exists($obj, 'channel')) {
+            throw new Exception("Missing required property");
+        }
         return new Results(
          Results::fromChannel($obj->{'channel'})
         );
@@ -1181,6 +1199,45 @@ class Channel {
      * @throws Exception
      */
     public static function from(stdClass $obj): Channel {
+        if (!property_exists($obj, 'astronomy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'atmosphere')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'image')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'language')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lastBuildDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'location')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ttl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'units')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Channel(
          Channel::fromAstronomy($obj->{'astronomy'})
         ,Channel::fromAtmosphere($obj->{'atmosphere'})
@@ -1355,6 +1412,12 @@ class Astronomy {
      * @throws Exception
      */
     public static function from(stdClass $obj): Astronomy {
+        if (!property_exists($obj, 'sunrise')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sunset')) {
+            throw new Exception("Missing required property");
+        }
         return new Astronomy(
          Astronomy::fromSunrise($obj->{'sunrise'})
         ,Astronomy::fromSunset($obj->{'sunset'})
@@ -1611,6 +1674,18 @@ class Atmosphere {
      * @throws Exception
      */
     public static function from(stdClass $obj): Atmosphere {
+        if (!property_exists($obj, 'humidity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rising')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
         return new Atmosphere(
          Atmosphere::fromHumidity($obj->{'humidity'})
         ,Atmosphere::fromPressure($obj->{'pressure'})
@@ -1923,6 +1998,21 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromHeight($obj->{'height'})
         ,Image::fromLink($obj->{'link'})
@@ -2459,6 +2549,33 @@ class Item {
      * @throws Exception
      */
     public static function from(stdClass $obj): Item {
+        if (!property_exists($obj, 'condition')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forecast')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'guid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'long')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pubDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
         return new Item(
          Item::fromCondition($obj->{'condition'})
         ,Item::fromDescription($obj->{'description'})
@@ -2729,6 +2846,18 @@ class Condition {
      * @throws Exception
      */
     public static function from(stdClass $obj): Condition {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Condition(
          Condition::fromCode($obj->{'code'})
         ,Condition::fromDate($obj->{'date'})
@@ -3093,6 +3222,24 @@ class Forecast {
      * @throws Exception
      */
     public static function from(stdClass $obj): Forecast {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'day')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'high')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'low')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Forecast(
          Forecast::fromCode($obj->{'code'})
         ,Forecast::fromDate($obj->{'date'})
@@ -3201,6 +3348,9 @@ class GUID {
      * @throws Exception
      */
     public static function from(stdClass $obj): GUID {
+        if (!property_exists($obj, 'isPermaLink')) {
+            throw new Exception("Missing required property");
+        }
         return new GUID(
          GUID::fromIsPermaLink($obj->{'isPermaLink'})
         );
@@ -3403,6 +3553,15 @@ class Location {
      * @throws Exception
      */
     public static function from(stdClass $obj): Location {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'region')) {
+            throw new Exception("Missing required property");
+        }
         return new Location(
          Location::fromCity($obj->{'city'})
         ,Location::fromCountry($obj->{'country'})
@@ -3661,6 +3820,18 @@ class Units {
      * @throws Exception
      */
     public static function from(stdClass $obj): Units {
+        if (!property_exists($obj, 'distance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temperature')) {
+            throw new Exception("Missing required property");
+        }
         return new Units(
          Units::fromDistance($obj->{'distance'})
         ,Units::fromPressure($obj->{'pressure'})
@@ -3869,6 +4040,15 @@ class Wind {
      * @throws Exception
      */
     public static function from(stdClass $obj): Wind {
+        if (!property_exists($obj, 'chill')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'direction')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
         return new Wind(
          Wind::fromChill($obj->{'chill'})
         ,Wind::fromDirection($obj->{'direction'})
diff --git a/base/php/test/inputs/json/misc/8a62c.json/default/TopLevel.php b/head/php/test/inputs/json/misc/8a62c.json/default/TopLevel.php
index 3d4f5c7..e92c16a 100644
--- a/base/php/test/inputs/json/misc/8a62c.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/8a62c.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'total_population')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromTotalPopulation($obj->{'total_population'})
         );
@@ -246,6 +249,12 @@ class TotalPopulation {
      * @throws Exception
      */
     public static function from(stdClass $obj): TotalPopulation {
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'population')) {
+            throw new Exception("Missing required property");
+        }
         return new TotalPopulation(
          TotalPopulation::fromDate($obj->{'date'})
         ,TotalPopulation::fromPopulation($obj->{'population'})
diff --git a/base/php/test/inputs/json/misc/908db.json/default/TopLevel.php b/head/php/test/inputs/json/misc/908db.json/default/TopLevel.php
index e6d6f16..9af1157 100644
--- a/base/php/test/inputs/json/misc/908db.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/908db.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'states')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromStates($obj->{'states'})
         );
@@ -195,6 +198,9 @@ class StateElement {
      * @throws Exception
      */
     public static function from(stdClass $obj): StateElement {
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
         return new StateElement(
          StateElement::fromState($obj->{'state'})
         );
@@ -345,6 +351,12 @@ class StateState {
      * @throws Exception
      */
     public static function from(stdClass $obj): StateState {
+        if (!property_exists($obj, 'state_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state_name')) {
+            throw new Exception("Missing required property");
+        }
         return new StateState(
          StateState::fromStateID($obj->{'state_id'})
         ,StateState::fromStateName($obj->{'state_name'})
diff --git a/base/php/test/inputs/json/misc/9617f.json/default/TopLevel.php b/head/php/test/inputs/json/misc/9617f.json/default/TopLevel.php
index e448140..212c6e1 100644
--- a/base/php/test/inputs/json/misc/9617f.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/9617f.json/default/TopLevel.php
@@ -205,6 +205,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'base')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rates')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBase($obj->{'base'})
         ,TopLevel::fromDate($obj->{'date'})
diff --git a/base/php/test/inputs/json/misc/96f7c.json/default/TopLevel.php b/head/php/test/inputs/json/misc/96f7c.json/default/TopLevel.php
index db3e9cc..6fdf9b4 100644
--- a/base/php/test/inputs/json/misc/96f7c.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/96f7c.json/default/TopLevel.php
@@ -400,6 +400,24 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'git')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'github_services_sha')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hooks')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'importer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pages')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'verifiable_password_authentication')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromGit($obj->{'git'})
         ,TopLevel::fromGithubServicesSHA($obj->{'github_services_sha'})
diff --git a/base/php/test/inputs/json/misc/9847b.json/default/TopLevel.php b/head/php/test/inputs/json/misc/9847b.json/default/TopLevel.php
index a7b3faa..df19504 100644
--- a/base/php/test/inputs/json/misc/9847b.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/9847b.json/default/TopLevel.php
@@ -136,6 +136,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromID($obj->{'id'})
         ,TopLevel::fromName($obj->{'name'})
diff --git a/base/php/test/inputs/json/misc/9929c.json/default/TopLevel.php b/head/php/test/inputs/json/misc/9929c.json/default/TopLevel.php
index 94c8a8d..51996fe 100644
--- a/base/php/test/inputs/json/misc/9929c.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/9929c.json/default/TopLevel.php
@@ -85,6 +85,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'query')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromQuery($obj->{'query'})
         );
@@ -347,6 +350,18 @@ class Query {
      * @throws Exception
      */
     public static function from(stdClass $obj): Query {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lang')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new Query(
          Query::fromCount($obj->{'count'})
         ,Query::fromCreated($obj->{'created'})
@@ -452,6 +467,9 @@ class Results {
      * @throws Exception
      */
     public static function from(stdClass $obj): Results {
+        if (!property_exists($obj, 'channel')) {
+            throw new Exception("Missing required property");
+        }
         return new Results(
          Results::fromChannel($obj->{'channel'})
         );
@@ -1181,6 +1199,45 @@ class Channel {
      * @throws Exception
      */
     public static function from(stdClass $obj): Channel {
+        if (!property_exists($obj, 'astronomy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'atmosphere')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'image')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'language')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lastBuildDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'location')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ttl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'units')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Channel(
          Channel::fromAstronomy($obj->{'astronomy'})
         ,Channel::fromAtmosphere($obj->{'atmosphere'})
@@ -1355,6 +1412,12 @@ class Astronomy {
      * @throws Exception
      */
     public static function from(stdClass $obj): Astronomy {
+        if (!property_exists($obj, 'sunrise')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sunset')) {
+            throw new Exception("Missing required property");
+        }
         return new Astronomy(
          Astronomy::fromSunrise($obj->{'sunrise'})
         ,Astronomy::fromSunset($obj->{'sunset'})
@@ -1611,6 +1674,18 @@ class Atmosphere {
      * @throws Exception
      */
     public static function from(stdClass $obj): Atmosphere {
+        if (!property_exists($obj, 'humidity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rising')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
         return new Atmosphere(
          Atmosphere::fromHumidity($obj->{'humidity'})
         ,Atmosphere::fromPressure($obj->{'pressure'})
@@ -1923,6 +1998,21 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromHeight($obj->{'height'})
         ,Image::fromLink($obj->{'link'})
@@ -2459,6 +2549,33 @@ class Item {
      * @throws Exception
      */
     public static function from(stdClass $obj): Item {
+        if (!property_exists($obj, 'condition')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forecast')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'guid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'long')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pubDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
         return new Item(
          Item::fromCondition($obj->{'condition'})
         ,Item::fromDescription($obj->{'description'})
@@ -2729,6 +2846,18 @@ class Condition {
      * @throws Exception
      */
     public static function from(stdClass $obj): Condition {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Condition(
          Condition::fromCode($obj->{'code'})
         ,Condition::fromDate($obj->{'date'})
@@ -3093,6 +3222,24 @@ class Forecast {
      * @throws Exception
      */
     public static function from(stdClass $obj): Forecast {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'day')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'high')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'low')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Forecast(
          Forecast::fromCode($obj->{'code'})
         ,Forecast::fromDate($obj->{'date'})
@@ -3201,6 +3348,9 @@ class GUID {
      * @throws Exception
      */
     public static function from(stdClass $obj): GUID {
+        if (!property_exists($obj, 'isPermaLink')) {
+            throw new Exception("Missing required property");
+        }
         return new GUID(
          GUID::fromIsPermaLink($obj->{'isPermaLink'})
         );
@@ -3403,6 +3553,15 @@ class Location {
      * @throws Exception
      */
     public static function from(stdClass $obj): Location {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'region')) {
+            throw new Exception("Missing required property");
+        }
         return new Location(
          Location::fromCity($obj->{'city'})
         ,Location::fromCountry($obj->{'country'})
@@ -3661,6 +3820,18 @@ class Units {
      * @throws Exception
      */
     public static function from(stdClass $obj): Units {
+        if (!property_exists($obj, 'distance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temperature')) {
+            throw new Exception("Missing required property");
+        }
         return new Units(
          Units::fromDistance($obj->{'distance'})
         ,Units::fromPressure($obj->{'pressure'})
@@ -3869,6 +4040,15 @@ class Wind {
      * @throws Exception
      */
     public static function from(stdClass $obj): Wind {
+        if (!property_exists($obj, 'chill')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'direction')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
         return new Wind(
          Wind::fromChill($obj->{'chill'})
         ,Wind::fromDirection($obj->{'direction'})
diff --git a/base/php/test/inputs/json/misc/996bd.json/default/TopLevel.php b/head/php/test/inputs/json/misc/996bd.json/default/TopLevel.php
index ec80c56..fafbb45 100644
--- a/base/php/test/inputs/json/misc/996bd.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/996bd.json/default/TopLevel.php
@@ -517,6 +517,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'identifiers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'keywords')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'links')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'other_names')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'superseded_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromID($obj->{'id'})
         ,TopLevel::fromIdentifiers($obj->{'identifiers'})
@@ -682,6 +706,12 @@ class Identifier {
      * @throws Exception
      */
     public static function from(stdClass $obj): Identifier {
+        if (!property_exists($obj, 'identifier')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scheme')) {
+            throw new Exception("Missing required property");
+        }
         return new Identifier(
          Identifier::fromIdentifier($obj->{'identifier'})
         ,Identifier::fromScheme($obj->{'scheme'})
@@ -944,6 +974,12 @@ class Link {
      * @throws Exception
      */
     public static function from(stdClass $obj): Link {
+        if (!property_exists($obj, 'note')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Link(
          Link::fromNote($obj->{'note'})
         ,Link::fromURL($obj->{'url'})
@@ -1150,6 +1186,15 @@ class Text {
      * @throws Exception
      */
     public static function from(stdClass $obj): Text {
+        if (!property_exists($obj, 'media_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Text(
          Text::fromMediaType($obj->{'media_type'})
         ,Text::fromTitle($obj->{'title'})
diff --git a/base/php/test/inputs/json/misc/9a503.json/default/TopLevel.php b/head/php/test/inputs/json/misc/9a503.json/default/TopLevel.php
index 558e668..1bb8a00 100644
--- a/base/php/test/inputs/json/misc/9a503.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/9a503.json/default/TopLevel.php
@@ -510,6 +510,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'identifiers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'keywords')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'links')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'other_names')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'superseded_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromID($obj->{'id'})
         ,TopLevel::fromIdentifiers($obj->{'identifiers'})
@@ -674,6 +698,12 @@ class Identifier {
      * @throws Exception
      */
     public static function from(stdClass $obj): Identifier {
+        if (!property_exists($obj, 'identifier')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scheme')) {
+            throw new Exception("Missing required property");
+        }
         return new Identifier(
          Identifier::fromIdentifier($obj->{'identifier'})
         ,Identifier::fromScheme($obj->{'scheme'})
@@ -879,6 +909,12 @@ class Link {
      * @throws Exception
      */
     public static function from(stdClass $obj): Link {
+        if (!property_exists($obj, 'note')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Link(
          Link::fromNote($obj->{'note'})
         ,Link::fromURL($obj->{'url'})
@@ -1083,6 +1119,15 @@ class Text {
      * @throws Exception
      */
     public static function from(stdClass $obj): Text {
+        if (!property_exists($obj, 'media_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Text(
          Text::fromMediaType($obj->{'media_type'})
         ,Text::fromTitle($obj->{'title'})
diff --git a/base/php/test/inputs/json/misc/9ac3b.json/default/TopLevel.php b/head/php/test/inputs/json/misc/9ac3b.json/default/TopLevel.php
index f5ce2ad..6e91f6c 100644
--- a/base/php/test/inputs/json/misc/9ac3b.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/9ac3b.json/default/TopLevel.php
@@ -409,6 +409,27 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'facets')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'limit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'next')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'offset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'previous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCount($obj->{'count'})
         ,TopLevel::fromFacets($obj->{'facets'})
@@ -1120,6 +1141,39 @@ class Result {
      * @throws Exception
      */
     public static function from(stdClass $obj): Result {
+        if (!property_exists($obj, 'created_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'entity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'first_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'last_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'position')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uri')) {
+            throw new Exception("Missing required property");
+        }
         return new Result(
          Result::fromCreatedAt($obj->{'created_at'})
         ,Result::fromEntity($obj->{'entity'})
diff --git a/base/php/test/inputs/json/misc/9eed5.json/default/TopLevel.php b/head/php/test/inputs/json/misc/9eed5.json/default/TopLevel.php
index 01f2503..87b656b 100644
--- a/base/php/test/inputs/json/misc/9eed5.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/9eed5.json/default/TopLevel.php
@@ -510,6 +510,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'identifiers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'keywords')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'links')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'other_names')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'superseded_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromID($obj->{'id'})
         ,TopLevel::fromIdentifiers($obj->{'identifiers'})
@@ -674,6 +698,12 @@ class Identifier {
      * @throws Exception
      */
     public static function from(stdClass $obj): Identifier {
+        if (!property_exists($obj, 'identifier')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scheme')) {
+            throw new Exception("Missing required property");
+        }
         return new Identifier(
          Identifier::fromIdentifier($obj->{'identifier'})
         ,Identifier::fromScheme($obj->{'scheme'})
@@ -875,6 +905,12 @@ class Link {
      * @throws Exception
      */
     public static function from(stdClass $obj): Link {
+        if (!property_exists($obj, 'note')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Link(
          Link::fromNote($obj->{'note'})
         ,Link::fromURL($obj->{'url'})
@@ -1079,6 +1115,15 @@ class Text {
      * @throws Exception
      */
     public static function from(stdClass $obj): Text {
+        if (!property_exists($obj, 'media_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Text(
          Text::fromMediaType($obj->{'media_type'})
         ,Text::fromTitle($obj->{'title'})
diff --git a/base/php/test/inputs/json/misc/a0496.json/default/TopLevel.php b/head/php/test/inputs/json/misc/a0496.json/default/TopLevel.php
index 71971b6..e0ba9e2 100644
--- a/base/php/test/inputs/json/misc/a0496.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/a0496.json/default/TopLevel.php
@@ -991,6 +991,57 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'column_names')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'display_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'errors')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'frequency')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'from_date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'premium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source_code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'to_date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'urlize_name')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCode($obj->{'code'})
         ,TopLevel::fromColumnNames($obj->{'column_names'})
diff --git a/base/php/test/inputs/json/misc/a1eca.json/default/TopLevel.php b/head/php/test/inputs/json/misc/a1eca.json/default/TopLevel.php
index 94c8a8d..51996fe 100644
--- a/base/php/test/inputs/json/misc/a1eca.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/a1eca.json/default/TopLevel.php
@@ -85,6 +85,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'query')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromQuery($obj->{'query'})
         );
@@ -347,6 +350,18 @@ class Query {
      * @throws Exception
      */
     public static function from(stdClass $obj): Query {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lang')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new Query(
          Query::fromCount($obj->{'count'})
         ,Query::fromCreated($obj->{'created'})
@@ -452,6 +467,9 @@ class Results {
      * @throws Exception
      */
     public static function from(stdClass $obj): Results {
+        if (!property_exists($obj, 'channel')) {
+            throw new Exception("Missing required property");
+        }
         return new Results(
          Results::fromChannel($obj->{'channel'})
         );
@@ -1181,6 +1199,45 @@ class Channel {
      * @throws Exception
      */
     public static function from(stdClass $obj): Channel {
+        if (!property_exists($obj, 'astronomy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'atmosphere')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'image')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'language')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lastBuildDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'location')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ttl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'units')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Channel(
          Channel::fromAstronomy($obj->{'astronomy'})
         ,Channel::fromAtmosphere($obj->{'atmosphere'})
@@ -1355,6 +1412,12 @@ class Astronomy {
      * @throws Exception
      */
     public static function from(stdClass $obj): Astronomy {
+        if (!property_exists($obj, 'sunrise')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sunset')) {
+            throw new Exception("Missing required property");
+        }
         return new Astronomy(
          Astronomy::fromSunrise($obj->{'sunrise'})
         ,Astronomy::fromSunset($obj->{'sunset'})
@@ -1611,6 +1674,18 @@ class Atmosphere {
      * @throws Exception
      */
     public static function from(stdClass $obj): Atmosphere {
+        if (!property_exists($obj, 'humidity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rising')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
         return new Atmosphere(
          Atmosphere::fromHumidity($obj->{'humidity'})
         ,Atmosphere::fromPressure($obj->{'pressure'})
@@ -1923,6 +1998,21 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromHeight($obj->{'height'})
         ,Image::fromLink($obj->{'link'})
@@ -2459,6 +2549,33 @@ class Item {
      * @throws Exception
      */
     public static function from(stdClass $obj): Item {
+        if (!property_exists($obj, 'condition')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forecast')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'guid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'long')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pubDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
         return new Item(
          Item::fromCondition($obj->{'condition'})
         ,Item::fromDescription($obj->{'description'})
@@ -2729,6 +2846,18 @@ class Condition {
      * @throws Exception
      */
     public static function from(stdClass $obj): Condition {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Condition(
          Condition::fromCode($obj->{'code'})
         ,Condition::fromDate($obj->{'date'})
@@ -3093,6 +3222,24 @@ class Forecast {
      * @throws Exception
      */
     public static function from(stdClass $obj): Forecast {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'day')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'high')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'low')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Forecast(
          Forecast::fromCode($obj->{'code'})
         ,Forecast::fromDate($obj->{'date'})
@@ -3201,6 +3348,9 @@ class GUID {
      * @throws Exception
      */
     public static function from(stdClass $obj): GUID {
+        if (!property_exists($obj, 'isPermaLink')) {
+            throw new Exception("Missing required property");
+        }
         return new GUID(
          GUID::fromIsPermaLink($obj->{'isPermaLink'})
         );
@@ -3403,6 +3553,15 @@ class Location {
      * @throws Exception
      */
     public static function from(stdClass $obj): Location {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'region')) {
+            throw new Exception("Missing required property");
+        }
         return new Location(
          Location::fromCity($obj->{'city'})
         ,Location::fromCountry($obj->{'country'})
@@ -3661,6 +3820,18 @@ class Units {
      * @throws Exception
      */
     public static function from(stdClass $obj): Units {
+        if (!property_exists($obj, 'distance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temperature')) {
+            throw new Exception("Missing required property");
+        }
         return new Units(
          Units::fromDistance($obj->{'distance'})
         ,Units::fromPressure($obj->{'pressure'})
@@ -3869,6 +4040,15 @@ class Wind {
      * @throws Exception
      */
     public static function from(stdClass $obj): Wind {
+        if (!property_exists($obj, 'chill')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'direction')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
         return new Wind(
          Wind::fromChill($obj->{'chill'})
         ,Wind::fromDirection($obj->{'direction'})
diff --git a/base/php/test/inputs/json/misc/a3d8c.json/default/TopLevel.php b/head/php/test/inputs/json/misc/a3d8c.json/default/TopLevel.php
index 1dc8df8..c2a4299 100644
--- a/base/php/test/inputs/json/misc/a3d8c.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/a3d8c.json/default/TopLevel.php
@@ -190,6 +190,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromMeta($obj->{'meta'})
@@ -291,6 +297,9 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'view')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromView($obj->{'view'})
         );
@@ -2318,6 +2327,117 @@ class View {
      * @throws Exception
      */
     public static function from(stdClass $obj): View {
+        if (!property_exists($obj, 'averageRating')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'category')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'columns')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'createdAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'displayType')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downloadCount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'grants')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hideFromCatalog')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hideFromDataJson')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'indexUpdatedAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'license')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'licenseId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locale')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'metadata')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'newBackend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'numberOfComments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'oid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'owner')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'provenance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationAppendEnabled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationGroup')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationStage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'query')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rights')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowClass')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowsUpdatedAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowsUpdatedBy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tableAuthor')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tableId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'totalTimesRated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewCount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewLastModified')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewType')) {
+            throw new Exception("Missing required property");
+        }
         return new View(
          View::fromAverageRating($obj->{'averageRating'})
         ,View::fromCategory($obj->{'category'})
@@ -3066,6 +3186,27 @@ class Column {
      * @throws Exception
      */
     public static function from(stdClass $obj): Column {
+        if (!property_exists($obj, 'dataTypeName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fieldName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'format')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'position')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'renderTypeName')) {
+            throw new Exception("Missing required property");
+        }
         return new Column(
          Column::fromCachedContents($obj->{'cachedContents'})
         ,Column::fromDataTypeName($obj->{'dataTypeName'})
@@ -3528,6 +3669,21 @@ class CachedContents {
      * @throws Exception
      */
     public static function from(stdClass $obj): CachedContents {
+        if (!property_exists($obj, 'largest')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'non_null')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'null')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'smallest')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'top')) {
+            throw new Exception("Missing required property");
+        }
         return new CachedContents(
          CachedContents::fromAverage($obj->{'average'})
         ,CachedContents::fromLargest($obj->{'largest'})
@@ -3690,6 +3846,12 @@ class Top {
      * @throws Exception
      */
     public static function from(stdClass $obj): Top {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
         return new Top(
          Top::fromCount($obj->{'count'})
         ,Top::fromItem($obj->{'item'})
@@ -4006,6 +4168,15 @@ class Grant {
      * @throws Exception
      */
     public static function from(stdClass $obj): Grant {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'inherited')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Grant(
          Grant::fromFlags($obj->{'flags'})
         ,Grant::fromInherited($obj->{'inherited'})
@@ -4108,6 +4279,9 @@ class License {
      * @throws Exception
      */
     public static function from(stdClass $obj): License {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new License(
          License::fromName($obj->{'name'})
         );
@@ -4429,6 +4603,21 @@ class Metadata {
      * @throws Exception
      */
     public static function from(stdClass $obj): Metadata {
+        if (!property_exists($obj, 'availableDisplayTypes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rdfClass')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rdfSubject')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'renderTypeConfig')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowIdentifier')) {
+            throw new Exception("Missing required property");
+        }
         return new Metadata(
          Metadata::fromAvailableDisplayTypes($obj->{'availableDisplayTypes'})
         ,Metadata::fromRDFClass($obj->{'rdfClass'})
@@ -4536,6 +4725,9 @@ class RenderTypeConfig {
      * @throws Exception
      */
     public static function from(stdClass $obj): RenderTypeConfig {
+        if (!property_exists($obj, 'visible')) {
+            throw new Exception("Missing required property");
+        }
         return new RenderTypeConfig(
          RenderTypeConfig::fromVisible($obj->{'visible'})
         );
@@ -4634,6 +4826,9 @@ class Visible {
      * @throws Exception
      */
     public static function from(stdClass $obj): Visible {
+        if (!property_exists($obj, 'table')) {
+            throw new Exception("Missing required property");
+        }
         return new Visible(
          Visible::fromTable($obj->{'table'})
         );
@@ -4836,6 +5031,15 @@ class Owner {
      * @throws Exception
      */
     public static function from(stdClass $obj): Owner {
+        if (!property_exists($obj, 'displayName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'screenName')) {
+            throw new Exception("Missing required property");
+        }
         return new Owner(
          Owner::fromDisplayName($obj->{'displayName'})
         ,Owner::fromID($obj->{'id'})
diff --git a/base/php/test/inputs/json/misc/a45b0.json/default/TopLevel.php b/head/php/test/inputs/json/misc/a45b0.json/default/TopLevel.php
index 0dc389d..28c6e23 100644
--- a/base/php/test/inputs/json/misc/a45b0.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/a45b0.json/default/TopLevel.php
@@ -345,6 +345,24 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'age')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'females')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'males')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'year')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromAge($obj->{'age'})
         ,TopLevel::fromCountry($obj->{'country'})
diff --git a/base/php/test/inputs/json/misc/a71df.json/default/TopLevel.php b/head/php/test/inputs/json/misc/a71df.json/default/TopLevel.php
index 3a8b02e..d1cdcf2 100644
--- a/base/php/test/inputs/json/misc/a71df.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/a71df.json/default/TopLevel.php
@@ -450,6 +450,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'delay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'IATA')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ICAO')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCity($obj->{'city'})
         ,TopLevel::fromDelay($obj->{'delay'})
@@ -978,6 +1002,33 @@ class Status {
      * @throws Exception
      */
     public static function from(stdClass $obj): Status {
+        if (!property_exists($obj, 'avgDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureBegin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureEnd')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'endTime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'maxDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Status(
          Status::fromAvgDelay($obj->{'avgDelay'})
         ,Status::fromClosureBegin($obj->{'closureBegin'})
@@ -1301,6 +1352,21 @@ class Weather {
      * @throws Exception
      */
     public static function from(stdClass $obj): Weather {
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Weather(
          Weather::fromMeta($obj->{'meta'})
         ,Weather::fromTemp($obj->{'temp'})
@@ -1511,6 +1577,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'credit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromCredit($obj->{'credit'})
         ,Meta::fromUpdated($obj->{'updated'})
diff --git a/base/php/test/inputs/json/misc/a9691.json/default/TopLevel.php b/head/php/test/inputs/json/misc/a9691.json/default/TopLevel.php
index e448140..212c6e1 100644
--- a/base/php/test/inputs/json/misc/a9691.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/a9691.json/default/TopLevel.php
@@ -205,6 +205,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'base')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rates')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBase($obj->{'base'})
         ,TopLevel::fromDate($obj->{'date'})
diff --git a/base/php/test/inputs/json/misc/ab0d1.json/default/TopLevel.php b/head/php/test/inputs/json/misc/ab0d1.json/default/TopLevel.php
index 0dc389d..28c6e23 100644
--- a/base/php/test/inputs/json/misc/ab0d1.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/ab0d1.json/default/TopLevel.php
@@ -345,6 +345,24 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'age')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'females')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'males')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'year')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromAge($obj->{'age'})
         ,TopLevel::fromCountry($obj->{'country'})
diff --git a/base/php/test/inputs/json/misc/abb4b.json/default/TopLevel.php b/head/php/test/inputs/json/misc/abb4b.json/default/TopLevel.php
index 3d4f5c7..e92c16a 100644
--- a/base/php/test/inputs/json/misc/abb4b.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/abb4b.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'total_population')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromTotalPopulation($obj->{'total_population'})
         );
@@ -246,6 +249,12 @@ class TotalPopulation {
      * @throws Exception
      */
     public static function from(stdClass $obj): TotalPopulation {
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'population')) {
+            throw new Exception("Missing required property");
+        }
         return new TotalPopulation(
          TotalPopulation::fromDate($obj->{'date'})
         ,TotalPopulation::fromPopulation($obj->{'population'})
diff --git a/base/php/test/inputs/json/misc/ac944.json/default/TopLevel.php b/head/php/test/inputs/json/misc/ac944.json/default/TopLevel.php
index e448140..212c6e1 100644
--- a/base/php/test/inputs/json/misc/ac944.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/ac944.json/default/TopLevel.php
@@ -205,6 +205,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'base')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rates')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBase($obj->{'base'})
         ,TopLevel::fromDate($obj->{'date'})
diff --git a/base/php/test/inputs/json/misc/ad8be.json/default/TopLevel.php b/head/php/test/inputs/json/misc/ad8be.json/default/TopLevel.php
index b404894..a64b62a 100644
--- a/base/php/test/inputs/json/misc/ad8be.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/ad8be.json/default/TopLevel.php
@@ -518,6 +518,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'identifiers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'keywords')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'links')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'other_names')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'superseded_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromID($obj->{'id'})
         ,TopLevel::fromIdentifiers($obj->{'identifiers'})
@@ -683,6 +707,12 @@ class Identifier {
      * @throws Exception
      */
     public static function from(stdClass $obj): Identifier {
+        if (!property_exists($obj, 'identifier')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scheme')) {
+            throw new Exception("Missing required property");
+        }
         return new Identifier(
          Identifier::fromIdentifier($obj->{'identifier'})
         ,Identifier::fromScheme($obj->{'scheme'})
@@ -978,6 +1008,12 @@ class Link {
      * @throws Exception
      */
     public static function from(stdClass $obj): Link {
+        if (!property_exists($obj, 'note')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Link(
          Link::fromNote($obj->{'note'})
         ,Link::fromURL($obj->{'url'})
@@ -1205,6 +1241,12 @@ class OtherName {
      * @throws Exception
      */
     public static function from(stdClass $obj): OtherName {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'note')) {
+            throw new Exception("Missing required property");
+        }
         return new OtherName(
          OtherName::fromName($obj->{'name'})
         ,OtherName::fromNote($obj->{'note'})
@@ -1411,6 +1453,15 @@ class Text {
      * @throws Exception
      */
     public static function from(stdClass $obj): Text {
+        if (!property_exists($obj, 'media_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Text(
          Text::fromMediaType($obj->{'media_type'})
         ,Text::fromTitle($obj->{'title'})
diff --git a/base/php/test/inputs/json/misc/ae7f0.json/default/TopLevel.php b/head/php/test/inputs/json/misc/ae7f0.json/default/TopLevel.php
index 773b91a..34e222e 100644
--- a/base/php/test/inputs/json/misc/ae7f0.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/ae7f0.json/default/TopLevel.php
@@ -137,6 +137,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromKind($obj->{'kind'})
@@ -408,6 +414,18 @@ class TopLevelData {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevelData {
+        if (!property_exists($obj, 'after')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'before')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'children')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'modhash')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevelData(
          TopLevelData::fromAfter($obj->{'after'})
         ,TopLevelData::fromBefore($obj->{'before'})
@@ -566,6 +584,12 @@ class Child {
      * @throws Exception
      */
     public static function from(stdClass $obj): Child {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new Child(
          Child::fromData($obj->{'data'})
         ,Child::fromKind($obj->{'kind'})
@@ -3831,6 +3855,186 @@ class ChildData {
      * @throws Exception
      */
     public static function from(stdClass $obj): ChildData {
+        if (!property_exists($obj, 'approved_at_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'approved_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'archived')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author_flair_css_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author_flair_text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banned_at_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banned_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'brand_safe')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'can_gild')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'can_mod_post')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'clicked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'contest_mode')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'distinguished')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'domain')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downs')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'edited')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gilded')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hidden')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hide_score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_self')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_video')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'likes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link_flair_css_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link_flair_text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'media')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'media_embed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mod_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'over_18')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'permalink')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'quarantine')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'removal_reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'report_reasons')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'saved')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'secure_media')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'secure_media_embed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'selftext')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'selftext_html')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'spoiler')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stickied')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_name_prefixed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'suggested_sort')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ups')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'user_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'view_count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visited')) {
+            throw new Exception("Missing required property");
+        }
         return new ChildData(
          ChildData::fromApprovedAtUTC($obj->{'approved_at_utc'})
         ,ChildData::fromApprovedBy($obj->{'approved_by'})
diff --git a/base/php/test/inputs/json/misc/ae9ca.json/default/TopLevel.php b/head/php/test/inputs/json/misc/ae9ca.json/default/TopLevel.php
index 79894f6..de4a270 100644
--- a/base/php/test/inputs/json/misc/ae9ca.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/ae9ca.json/default/TopLevel.php
@@ -200,6 +200,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'features')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromFeatures($obj->{'features'})
         ,TopLevel::fromName($obj->{'name'})
@@ -409,6 +418,15 @@ class Feature {
      * @throws Exception
      */
     public static function from(stdClass $obj): Feature {
+        if (!property_exists($obj, 'geometry')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'properties')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Feature(
          Feature::fromGeometry($obj->{'geometry'})
         ,Feature::fromProperties($obj->{'properties'})
@@ -578,6 +596,12 @@ class Geometry {
      * @throws Exception
      */
     public static function from(stdClass $obj): Geometry {
+        if (!property_exists($obj, 'coordinates')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Geometry(
          Geometry::fromCoordinates($obj->{'coordinates'})
         ,Geometry::fromType($obj->{'type'})
@@ -1194,6 +1218,36 @@ class Properties {
      * @throws Exception
      */
     public static function from(stdClass $obj): Properties {
+        if (!property_exists($obj, 'Area')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Central Asset ID')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Feature Location')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'long')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Maintaining Authority')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Number')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Site Name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Ward')) {
+            throw new Exception("Missing required property");
+        }
         return new Properties(
          Properties::fromArea($obj->{'Area'})
         ,Properties::fromCentralAssetID($obj->{'Central Asset ID'})
diff --git a/base/php/test/inputs/json/misc/af2d1.json/default/TopLevel.php b/head/php/test/inputs/json/misc/af2d1.json/default/TopLevel.php
index 484568c..75b9c5a 100644
--- a/base/php/test/inputs/json/misc/af2d1.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/af2d1.json/default/TopLevel.php
@@ -253,6 +253,18 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'crs')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'features')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'totalFeatures')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCRS($obj->{'crs'})
         ,TopLevel::fromFeatures($obj->{'features'})
@@ -410,6 +422,12 @@ class CRS {
      * @throws Exception
      */
     public static function from(stdClass $obj): CRS {
+        if (!property_exists($obj, 'properties')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new CRS(
          CRS::fromProperties($obj->{'properties'})
         ,CRS::fromType($obj->{'type'})
@@ -510,6 +528,9 @@ class CRSProperties {
      * @throws Exception
      */
     public static function from(stdClass $obj): CRSProperties {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new CRSProperties(
          CRSProperties::fromName($obj->{'name'})
         );
@@ -820,6 +841,21 @@ class Feature {
      * @throws Exception
      */
     public static function from(stdClass $obj): Feature {
+        if (!property_exists($obj, 'geometry')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'geometry_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'properties')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Feature(
          Feature::fromGeometry($obj->{'geometry'})
         ,Feature::fromGeometryName($obj->{'geometry_name'})
@@ -1026,6 +1062,12 @@ class Geometry {
      * @throws Exception
      */
     public static function from(stdClass $obj): Geometry {
+        if (!property_exists($obj, 'coordinates')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Geometry(
          Geometry::fromCoordinates($obj->{'coordinates'})
         ,Geometry::fromType($obj->{'type'})
@@ -3302,6 +3344,120 @@ class FeatureProperties {
      * @throws Exception
      */
     public static function from(stdClass $obj): FeatureProperties {
+        if (!property_exists($obj, 'add_improv')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'area_')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'asset_numb')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'condition')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'constructi')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'createdate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'createuser')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'disposal_d')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'documents')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'drawing_nu')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'file_numbe')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'folder_num')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'funding_ba')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'historic_c')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'inspection')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'inspectors')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'last_updat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'level_accu')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'material')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mi_prinx')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mi_symbolo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'number_lan')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'owner')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'positional')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'project_nu')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rec_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'record_cre')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'shape_area')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'shape_leng')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'survey_num')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'toe_rl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'top_rl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'update_dat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updatedate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updateuser')) {
+            throw new Exception("Missing required property");
+        }
         return new FeatureProperties(
          FeatureProperties::fromAddImprov($obj->{'add_improv'})
         ,FeatureProperties::fromArea($obj->{'area_'})
diff --git a/base/php/test/inputs/json/misc/b4865.json/default/TopLevel.php b/head/php/test/inputs/json/misc/b4865.json/default/TopLevel.php
index 80034b1..612c3e7 100644
--- a/base/php/test/inputs/json/misc/b4865.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/b4865.json/default/TopLevel.php
@@ -736,6 +736,21 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'fall')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nametype')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'recclass')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromComputedRegionCbhkFwbd($obj->{':@computed_region_cbhk_fwbd'})
         ,TopLevel::fromComputedRegionNnqa25F4($obj->{':@computed_region_nnqa_25f4'})
@@ -972,6 +987,12 @@ class Geolocation {
      * @throws Exception
      */
     public static function from(stdClass $obj): Geolocation {
+        if (!property_exists($obj, 'coordinates')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Geolocation(
          Geolocation::fromCoordinates($obj->{'coordinates'})
         ,Geolocation::fromType($obj->{'type'})
diff --git a/base/php/test/inputs/json/misc/b6f2c.json/default/TopLevel.php b/head/php/test/inputs/json/misc/b6f2c.json/default/TopLevel.php
index 3d4f5c7..e92c16a 100644
--- a/base/php/test/inputs/json/misc/b6f2c.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/b6f2c.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'total_population')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromTotalPopulation($obj->{'total_population'})
         );
@@ -246,6 +249,12 @@ class TotalPopulation {
      * @throws Exception
      */
     public static function from(stdClass $obj): TotalPopulation {
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'population')) {
+            throw new Exception("Missing required property");
+        }
         return new TotalPopulation(
          TotalPopulation::fromDate($obj->{'date'})
         ,TotalPopulation::fromPopulation($obj->{'population'})
diff --git a/base/php/test/inputs/json/misc/b6fe5.json/default/TopLevel.php b/head/php/test/inputs/json/misc/b6fe5.json/default/TopLevel.php
index 6cffa1a..de960dc 100644
--- a/base/php/test/inputs/json/misc/b6fe5.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/b6fe5.json/default/TopLevel.php
@@ -240,6 +240,18 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'group')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'movie')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'movie-image')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'theater')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromGroup($obj->{'group'})
         ,TopLevel::fromMovie($obj->{'movie'})
diff --git a/base/php/test/inputs/json/misc/b9f64.json/default/TopLevel.php b/head/php/test/inputs/json/misc/b9f64.json/default/TopLevel.php
index 358cdc7..96d308a 100644
--- a/base/php/test/inputs/json/misc/b9f64.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/b9f64.json/default/TopLevel.php
@@ -84,6 +84,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'user-agent')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromUserAgent($obj->{'user-agent'})
         );
diff --git a/base/php/test/inputs/json/misc/bb1ec.json/default/TopLevel.php b/head/php/test/inputs/json/misc/bb1ec.json/default/TopLevel.php
index 3d4f5c7..e92c16a 100644
--- a/base/php/test/inputs/json/misc/bb1ec.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/bb1ec.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'total_population')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromTotalPopulation($obj->{'total_population'})
         );
@@ -246,6 +249,12 @@ class TotalPopulation {
      * @throws Exception
      */
     public static function from(stdClass $obj): TotalPopulation {
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'population')) {
+            throw new Exception("Missing required property");
+        }
         return new TotalPopulation(
          TotalPopulation::fromDate($obj->{'date'})
         ,TotalPopulation::fromPopulation($obj->{'population'})
diff --git a/base/php/test/inputs/json/misc/be234.json/default/TopLevel.php b/head/php/test/inputs/json/misc/be234.json/default/TopLevel.php
index d0d83ba..3969038 100644
--- a/base/php/test/inputs/json/misc/be234.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/be234.json/default/TopLevel.php
@@ -137,6 +137,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromKind($obj->{'kind'})
@@ -408,6 +414,18 @@ class TopLevelData {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevelData {
+        if (!property_exists($obj, 'after')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'before')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'children')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'modhash')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevelData(
          TopLevelData::fromAfter($obj->{'after'})
         ,TopLevelData::fromBefore($obj->{'before'})
@@ -566,6 +584,12 @@ class Child {
      * @throws Exception
      */
     public static function from(stdClass $obj): Child {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new Child(
          Child::fromData($obj->{'data'})
         ,Child::fromKind($obj->{'kind'})
@@ -4057,6 +4081,198 @@ class ChildData {
      * @throws Exception
      */
     public static function from(stdClass $obj): ChildData {
+        if (!property_exists($obj, 'approved_at_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'approved_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'archived')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author_flair_css_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author_flair_text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banned_at_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banned_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'brand_safe')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'can_gild')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'can_mod_post')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'clicked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'contest_mode')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'distinguished')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'domain')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downs')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'edited')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gilded')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hidden')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hide_score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_self')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_video')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'likes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link_flair_css_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link_flair_text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'media')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'media_embed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mod_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'over_18')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'permalink')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'post_hint')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'quarantine')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'removal_reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'report_reasons')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'saved')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'secure_media')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'secure_media_embed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'selftext')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'selftext_html')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'spoiler')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stickied')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_name_prefixed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'suggested_sort')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_width')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ups')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'user_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'view_count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visited')) {
+            throw new Exception("Missing required property");
+        }
         return new ChildData(
          ChildData::fromApprovedAtUTC($obj->{'approved_at_utc'})
         ,ChildData::fromApprovedBy($obj->{'approved_by'})
@@ -4396,6 +4612,12 @@ class Media {
      * @throws Exception
      */
     public static function from(stdClass $obj): Media {
+        if (!property_exists($obj, 'oembed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Media(
          Media::fromOembed($obj->{'oembed'})
         ,Media::fromType($obj->{'type'})
@@ -5068,6 +5290,42 @@ class Oembed {
      * @throws Exception
      */
     public static function from(stdClass $obj): Oembed {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'html')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'provider_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'provider_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_width')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'version')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Oembed(
          Oembed::fromDescription($obj->{'description'})
         ,Oembed::fromHeight($obj->{'height'})
@@ -5605,6 +5863,12 @@ class Preview {
      * @throws Exception
      */
     public static function from(stdClass $obj): Preview {
+        if (!property_exists($obj, 'enabled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'images')) {
+            throw new Exception("Missing required property");
+        }
         return new Preview(
          Preview::fromEnabled($obj->{'enabled'})
         ,Preview::fromImages($obj->{'images'})
@@ -5875,6 +6139,18 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'resolutions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'variants')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromID($obj->{'id'})
         ,Image::fromResolutions($obj->{'resolutions'})
@@ -6083,6 +6359,15 @@ class Source {
      * @throws Exception
      */
     public static function from(stdClass $obj): Source {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Source(
          Source::fromHeight($obj->{'height'})
         ,Source::fromURL($obj->{'url'})
@@ -6424,6 +6709,12 @@ class GIF {
      * @throws Exception
      */
     public static function from(stdClass $obj): GIF {
+        if (!property_exists($obj, 'resolutions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
         return new GIF(
          GIF::fromResolutions($obj->{'resolutions'})
         ,GIF::fromSource($obj->{'source'})
diff --git a/base/php/test/inputs/json/misc/c0356.json/default/TopLevel.php b/head/php/test/inputs/json/misc/c0356.json/default/TopLevel.php
index f6899a8..0d162dd 100644
--- a/base/php/test/inputs/json/misc/c0356.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/c0356.json/default/TopLevel.php
@@ -152,6 +152,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromDescription($obj->{'description'})
@@ -304,6 +310,12 @@ class Datum {
      * @throws Exception
      */
     public static function from(stdClass $obj): Datum {
+        if (!property_exists($obj, 'anomaly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'value')) {
+            throw new Exception("Missing required property");
+        }
         return new Datum(
          Datum::fromAnomaly($obj->{'anomaly'})
         ,Datum::fromValue($obj->{'value'})
@@ -508,6 +520,15 @@ class Description {
      * @throws Exception
      */
     public static function from(stdClass $obj): Description {
+        if (!property_exists($obj, 'base_period')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'missing')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
         return new Description(
          Description::fromBasePeriod($obj->{'base_period'})
         ,Description::fromMissing($obj->{'missing'})
diff --git a/base/php/test/inputs/json/misc/c0a3a.json/default/TopLevel.php b/head/php/test/inputs/json/misc/c0a3a.json/default/TopLevel.php
index 3a8b02e..d1cdcf2 100644
--- a/base/php/test/inputs/json/misc/c0a3a.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/c0a3a.json/default/TopLevel.php
@@ -450,6 +450,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'delay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'IATA')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ICAO')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCity($obj->{'city'})
         ,TopLevel::fromDelay($obj->{'delay'})
@@ -978,6 +1002,33 @@ class Status {
      * @throws Exception
      */
     public static function from(stdClass $obj): Status {
+        if (!property_exists($obj, 'avgDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureBegin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureEnd')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'endTime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'maxDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Status(
          Status::fromAvgDelay($obj->{'avgDelay'})
         ,Status::fromClosureBegin($obj->{'closureBegin'})
@@ -1301,6 +1352,21 @@ class Weather {
      * @throws Exception
      */
     public static function from(stdClass $obj): Weather {
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Weather(
          Weather::fromMeta($obj->{'meta'})
         ,Weather::fromTemp($obj->{'temp'})
@@ -1511,6 +1577,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'credit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromCredit($obj->{'credit'})
         ,Meta::fromUpdated($obj->{'updated'})
diff --git a/base/php/test/inputs/json/misc/c3303.json/default/TopLevel.php b/head/php/test/inputs/json/misc/c3303.json/default/TopLevel.php
index 18ab747..1b95945 100644
--- a/base/php/test/inputs/json/misc/c3303.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/c3303.json/default/TopLevel.php
@@ -202,6 +202,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pagination')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromMeta($obj->{'meta'})
@@ -1203,6 +1212,57 @@ class Datum {
      * @throws Exception
      */
     public static function from(stdClass $obj): Datum {
+        if (!property_exists($obj, 'bitly_gif_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bitly_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'content_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'embed_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'images')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'import_datetime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_indexable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rating')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'slug')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source_post_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source_tld')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trending_datetime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'username')) {
+            throw new Exception("Missing required property");
+        }
         return new Datum(
          Datum::fromBitlyGIFURL($obj->{'bitly_gif_url'})
         ,Datum::fromBitlyURL($obj->{'bitly_url'})
@@ -2512,6 +2572,72 @@ class Images {
      * @throws Exception
      */
     public static function from(stdClass $obj): Images {
+        if (!property_exists($obj, 'downsized')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_large')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_medium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_downsampled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_small_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_downsampled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_small_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'looping')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original_mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview_gif')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview_webp')) {
+            throw new Exception("Missing required property");
+        }
         return new Images(
          Images::fromDownsized($obj->{'downsized'})
         ,Images::fromDownsizedLarge($obj->{'downsized_large'})
@@ -2820,6 +2946,15 @@ class Downsized {
      * @throws Exception
      */
     public static function from(stdClass $obj): Downsized {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Downsized(
          Downsized::fromHeight($obj->{'height'})
         ,Downsized::fromSize($obj->{'size'})
@@ -3080,6 +3215,18 @@ class DownsizedSmall {
      * @throws Exception
      */
     public static function from(stdClass $obj): DownsizedSmall {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4_size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new DownsizedSmall(
          DownsizedSmall::fromHeight($obj->{'height'})
         ,DownsizedSmall::fromMp4($obj->{'mp4'})
@@ -3692,6 +3839,24 @@ class FixedHeight {
      * @throws Exception
      */
     public static function from(stdClass $obj): FixedHeight {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'webp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'webp_size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new FixedHeight(
          FixedHeight::fromFrames($obj->{'frames'})
         ,FixedHeight::fromHash($obj->{'hash'})
@@ -3860,6 +4025,12 @@ class Looping {
      * @throws Exception
      */
     public static function from(stdClass $obj): Looping {
+        if (!property_exists($obj, 'mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4_size')) {
+            throw new Exception("Missing required property");
+        }
         return new Looping(
          Looping::fromMp4($obj->{'mp4'})
         ,Looping::fromMp4Size($obj->{'mp4_size'})
@@ -4267,6 +4438,21 @@ class User {
      * @throws Exception
      */
     public static function from(stdClass $obj): User {
+        if (!property_exists($obj, 'avatar_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banner_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'display_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profile_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'username')) {
+            throw new Exception("Missing required property");
+        }
         return new User(
          User::fromAvatarURL($obj->{'avatar_url'})
         ,User::fromBannerURL($obj->{'banner_url'})
@@ -4526,6 +4712,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'msg')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'response_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromMsg($obj->{'msg'})
         ,Meta::fromResponseID($obj->{'response_id'})
@@ -4732,6 +4927,15 @@ class Pagination {
      * @throws Exception
      */
     public static function from(stdClass $obj): Pagination {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'offset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total_count')) {
+            throw new Exception("Missing required property");
+        }
         return new Pagination(
          Pagination::fromCount($obj->{'count'})
         ,Pagination::fromOffset($obj->{'offset'})
diff --git a/base/php/test/inputs/json/misc/c6cfd.json/default/TopLevel.php b/head/php/test/inputs/json/misc/c6cfd.json/default/TopLevel.php
index cbe2f08..f484fcb 100644
--- a/base/php/test/inputs/json/misc/c6cfd.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/c6cfd.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'countries')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCountries($obj->{'countries'})
         );
@@ -246,6 +249,12 @@ class Country {
      * @throws Exception
      */
     public static function from(stdClass $obj): Country {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new Country(
          Country::fromCode($obj->{'code'})
         ,Country::fromName($obj->{'name'})
diff --git a/base/php/test/inputs/json/misc/cb0cc.json/default/TopLevel.php b/head/php/test/inputs/json/misc/cb0cc.json/default/TopLevel.php
index f82b2da..715b0df 100644
--- a/base/php/test/inputs/json/misc/cb0cc.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/cb0cc.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'prizes')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromPrizes($obj->{'prizes'})
         );
@@ -373,6 +376,15 @@ class Prize {
      * @throws Exception
      */
     public static function from(stdClass $obj): Prize {
+        if (!property_exists($obj, 'category')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'laureates')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'year')) {
+            throw new Exception("Missing required property");
+        }
         return new Prize(
          Prize::fromCategory($obj->{'category'})
         ,Prize::fromLaureates($obj->{'laureates'})
@@ -760,6 +772,18 @@ class Laureate {
      * @throws Exception
      */
     public static function from(stdClass $obj): Laureate {
+        if (!property_exists($obj, 'firstname')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'share')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'surname')) {
+            throw new Exception("Missing required property");
+        }
         return new Laureate(
          Laureate::fromFirstname($obj->{'firstname'})
         ,Laureate::fromID($obj->{'id'})
diff --git a/base/php/test/inputs/json/misc/cb81e.json/default/TopLevel.php b/head/php/test/inputs/json/misc/cb81e.json/default/TopLevel.php
index 42b3b70..9da50a1 100644
--- a/base/php/test/inputs/json/misc/cb81e.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/cb81e.json/default/TopLevel.php
@@ -154,6 +154,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromDescription($obj->{'description'})
@@ -410,6 +416,18 @@ class Description {
      * @throws Exception
      */
     public static function from(stdClass $obj): Description {
+        if (!property_exists($obj, 'base_period')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'missing')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'units')) {
+            throw new Exception("Missing required property");
+        }
         return new Description(
          Description::fromBasePeriod($obj->{'base_period'})
         ,Description::fromMissing($obj->{'missing'})
diff --git a/base/php/test/inputs/json/misc/ccd18.json/default/TopLevel.php b/head/php/test/inputs/json/misc/ccd18.json/default/TopLevel.php
index 3a8b02e..d1cdcf2 100644
--- a/base/php/test/inputs/json/misc/ccd18.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/ccd18.json/default/TopLevel.php
@@ -450,6 +450,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'delay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'IATA')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ICAO')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCity($obj->{'city'})
         ,TopLevel::fromDelay($obj->{'delay'})
@@ -978,6 +1002,33 @@ class Status {
      * @throws Exception
      */
     public static function from(stdClass $obj): Status {
+        if (!property_exists($obj, 'avgDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureBegin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureEnd')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'endTime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'maxDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Status(
          Status::fromAvgDelay($obj->{'avgDelay'})
         ,Status::fromClosureBegin($obj->{'closureBegin'})
@@ -1301,6 +1352,21 @@ class Weather {
      * @throws Exception
      */
     public static function from(stdClass $obj): Weather {
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Weather(
          Weather::fromMeta($obj->{'meta'})
         ,Weather::fromTemp($obj->{'temp'})
@@ -1511,6 +1577,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'credit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromCredit($obj->{'credit'})
         ,Meta::fromUpdated($obj->{'updated'})
diff --git a/base/php/test/inputs/json/misc/cd238.json/default/TopLevel.php b/head/php/test/inputs/json/misc/cd238.json/default/TopLevel.php
index 3a8b02e..d1cdcf2 100644
--- a/base/php/test/inputs/json/misc/cd238.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/cd238.json/default/TopLevel.php
@@ -450,6 +450,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'delay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'IATA')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ICAO')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCity($obj->{'city'})
         ,TopLevel::fromDelay($obj->{'delay'})
@@ -978,6 +1002,33 @@ class Status {
      * @throws Exception
      */
     public static function from(stdClass $obj): Status {
+        if (!property_exists($obj, 'avgDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureBegin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closureEnd')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'endTime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'maxDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minDelay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Status(
          Status::fromAvgDelay($obj->{'avgDelay'})
         ,Status::fromClosureBegin($obj->{'closureBegin'})
@@ -1301,6 +1352,21 @@ class Weather {
      * @throws Exception
      */
     public static function from(stdClass $obj): Weather {
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weather')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Weather(
          Weather::fromMeta($obj->{'meta'})
         ,Weather::fromTemp($obj->{'temp'})
@@ -1511,6 +1577,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'credit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromCredit($obj->{'credit'})
         ,Meta::fromUpdated($obj->{'updated'})
diff --git a/base/php/test/inputs/json/misc/cd463.json/default/TopLevel.php b/head/php/test/inputs/json/misc/cd463.json/default/TopLevel.php
index e448140..212c6e1 100644
--- a/base/php/test/inputs/json/misc/cd463.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/cd463.json/default/TopLevel.php
@@ -205,6 +205,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'base')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rates')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBase($obj->{'base'})
         ,TopLevel::fromDate($obj->{'date'})
diff --git a/base/php/test/inputs/json/misc/cf0d8.json/default/TopLevel.php b/head/php/test/inputs/json/misc/cf0d8.json/default/TopLevel.php
index 94c8a8d..51996fe 100644
--- a/base/php/test/inputs/json/misc/cf0d8.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/cf0d8.json/default/TopLevel.php
@@ -85,6 +85,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'query')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromQuery($obj->{'query'})
         );
@@ -347,6 +350,18 @@ class Query {
      * @throws Exception
      */
     public static function from(stdClass $obj): Query {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lang')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new Query(
          Query::fromCount($obj->{'count'})
         ,Query::fromCreated($obj->{'created'})
@@ -452,6 +467,9 @@ class Results {
      * @throws Exception
      */
     public static function from(stdClass $obj): Results {
+        if (!property_exists($obj, 'channel')) {
+            throw new Exception("Missing required property");
+        }
         return new Results(
          Results::fromChannel($obj->{'channel'})
         );
@@ -1181,6 +1199,45 @@ class Channel {
      * @throws Exception
      */
     public static function from(stdClass $obj): Channel {
+        if (!property_exists($obj, 'astronomy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'atmosphere')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'image')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'language')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lastBuildDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'location')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ttl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'units')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Channel(
          Channel::fromAstronomy($obj->{'astronomy'})
         ,Channel::fromAtmosphere($obj->{'atmosphere'})
@@ -1355,6 +1412,12 @@ class Astronomy {
      * @throws Exception
      */
     public static function from(stdClass $obj): Astronomy {
+        if (!property_exists($obj, 'sunrise')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sunset')) {
+            throw new Exception("Missing required property");
+        }
         return new Astronomy(
          Astronomy::fromSunrise($obj->{'sunrise'})
         ,Astronomy::fromSunset($obj->{'sunset'})
@@ -1611,6 +1674,18 @@ class Atmosphere {
      * @throws Exception
      */
     public static function from(stdClass $obj): Atmosphere {
+        if (!property_exists($obj, 'humidity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rising')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
         return new Atmosphere(
          Atmosphere::fromHumidity($obj->{'humidity'})
         ,Atmosphere::fromPressure($obj->{'pressure'})
@@ -1923,6 +1998,21 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromHeight($obj->{'height'})
         ,Image::fromLink($obj->{'link'})
@@ -2459,6 +2549,33 @@ class Item {
      * @throws Exception
      */
     public static function from(stdClass $obj): Item {
+        if (!property_exists($obj, 'condition')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forecast')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'guid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'long')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pubDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
         return new Item(
          Item::fromCondition($obj->{'condition'})
         ,Item::fromDescription($obj->{'description'})
@@ -2729,6 +2846,18 @@ class Condition {
      * @throws Exception
      */
     public static function from(stdClass $obj): Condition {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Condition(
          Condition::fromCode($obj->{'code'})
         ,Condition::fromDate($obj->{'date'})
@@ -3093,6 +3222,24 @@ class Forecast {
      * @throws Exception
      */
     public static function from(stdClass $obj): Forecast {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'day')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'high')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'low')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Forecast(
          Forecast::fromCode($obj->{'code'})
         ,Forecast::fromDate($obj->{'date'})
@@ -3201,6 +3348,9 @@ class GUID {
      * @throws Exception
      */
     public static function from(stdClass $obj): GUID {
+        if (!property_exists($obj, 'isPermaLink')) {
+            throw new Exception("Missing required property");
+        }
         return new GUID(
          GUID::fromIsPermaLink($obj->{'isPermaLink'})
         );
@@ -3403,6 +3553,15 @@ class Location {
      * @throws Exception
      */
     public static function from(stdClass $obj): Location {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'region')) {
+            throw new Exception("Missing required property");
+        }
         return new Location(
          Location::fromCity($obj->{'city'})
         ,Location::fromCountry($obj->{'country'})
@@ -3661,6 +3820,18 @@ class Units {
      * @throws Exception
      */
     public static function from(stdClass $obj): Units {
+        if (!property_exists($obj, 'distance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temperature')) {
+            throw new Exception("Missing required property");
+        }
         return new Units(
          Units::fromDistance($obj->{'distance'})
         ,Units::fromPressure($obj->{'pressure'})
@@ -3869,6 +4040,15 @@ class Wind {
      * @throws Exception
      */
     public static function from(stdClass $obj): Wind {
+        if (!property_exists($obj, 'chill')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'direction')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
         return new Wind(
          Wind::fromChill($obj->{'chill'})
         ,Wind::fromDirection($obj->{'direction'})
diff --git a/base/php/test/inputs/json/misc/cfbce.json/default/TopLevel.php b/head/php/test/inputs/json/misc/cfbce.json/default/TopLevel.php
index e448140..212c6e1 100644
--- a/base/php/test/inputs/json/misc/cfbce.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/cfbce.json/default/TopLevel.php
@@ -205,6 +205,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'base')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rates')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBase($obj->{'base'})
         ,TopLevel::fromDate($obj->{'date'})
diff --git a/base/php/test/inputs/json/misc/d0908.json/default/TopLevel.php b/head/php/test/inputs/json/misc/d0908.json/default/TopLevel.php
index 3d4f5c7..e92c16a 100644
--- a/base/php/test/inputs/json/misc/d0908.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/d0908.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'total_population')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromTotalPopulation($obj->{'total_population'})
         );
@@ -246,6 +249,12 @@ class TotalPopulation {
      * @throws Exception
      */
     public static function from(stdClass $obj): TotalPopulation {
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'population')) {
+            throw new Exception("Missing required property");
+        }
         return new TotalPopulation(
          TotalPopulation::fromDate($obj->{'date'})
         ,TotalPopulation::fromPopulation($obj->{'population'})
diff --git a/base/php/test/inputs/json/misc/d23d5.json/default/TopLevel.php b/head/php/test/inputs/json/misc/d23d5.json/default/TopLevel.php
index 20d4c72..ef14736 100644
--- a/base/php/test/inputs/json/misc/d23d5.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/d23d5.json/default/TopLevel.php
@@ -409,6 +409,27 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'facets')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'limit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'next')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'offset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'previous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCount($obj->{'count'})
         ,TopLevel::fromFacets($obj->{'facets'})
@@ -848,6 +869,24 @@ class Result {
      * @throws Exception
      */
     public static function from(stdClass $obj): Result {
+        if (!property_exists($obj, 'acronym')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uri')) {
+            throw new Exception("Missing required property");
+        }
         return new Result(
          Result::fromAcronym($obj->{'acronym'})
         ,Result::fromCreatedAt($obj->{'created_at'})
diff --git a/base/php/test/inputs/json/misc/dbfb3.json/default/TopLevel.php b/head/php/test/inputs/json/misc/dbfb3.json/default/TopLevel.php
index 8f5816f..f7523ea 100644
--- a/base/php/test/inputs/json/misc/dbfb3.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/dbfb3.json/default/TopLevel.php
@@ -85,6 +85,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'query')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromQuery($obj->{'query'})
         );
@@ -347,6 +350,18 @@ class Query {
      * @throws Exception
      */
     public static function from(stdClass $obj): Query {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lang')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new Query(
          Query::fromCount($obj->{'count'})
         ,Query::fromCreated($obj->{'created'})
@@ -452,6 +467,9 @@ class Results {
      * @throws Exception
      */
     public static function from(stdClass $obj): Results {
+        if (!property_exists($obj, 'channel')) {
+            throw new Exception("Missing required property");
+        }
         return new Results(
          Results::fromChannel($obj->{'channel'})
         );
@@ -1181,6 +1199,45 @@ class Channel {
      * @throws Exception
      */
     public static function from(stdClass $obj): Channel {
+        if (!property_exists($obj, 'astronomy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'atmosphere')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'image')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'language')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lastBuildDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'location')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ttl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'units')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Channel(
          Channel::fromAstronomy($obj->{'astronomy'})
         ,Channel::fromAtmosphere($obj->{'atmosphere'})
@@ -1355,6 +1412,12 @@ class Astronomy {
      * @throws Exception
      */
     public static function from(stdClass $obj): Astronomy {
+        if (!property_exists($obj, 'sunrise')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sunset')) {
+            throw new Exception("Missing required property");
+        }
         return new Astronomy(
          Astronomy::fromSunrise($obj->{'sunrise'})
         ,Astronomy::fromSunset($obj->{'sunset'})
@@ -1611,6 +1674,18 @@ class Atmosphere {
      * @throws Exception
      */
     public static function from(stdClass $obj): Atmosphere {
+        if (!property_exists($obj, 'humidity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rising')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
         return new Atmosphere(
          Atmosphere::fromHumidity($obj->{'humidity'})
         ,Atmosphere::fromPressure($obj->{'pressure'})
@@ -1923,6 +1998,21 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromHeight($obj->{'height'})
         ,Image::fromLink($obj->{'link'})
@@ -2459,6 +2549,33 @@ class Item {
      * @throws Exception
      */
     public static function from(stdClass $obj): Item {
+        if (!property_exists($obj, 'condition')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forecast')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'guid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'long')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pubDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
         return new Item(
          Item::fromCondition($obj->{'condition'})
         ,Item::fromDescription($obj->{'description'})
@@ -2730,6 +2847,18 @@ class Condition {
      * @throws Exception
      */
     public static function from(stdClass $obj): Condition {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Condition(
          Condition::fromCode($obj->{'code'})
         ,Condition::fromDate($obj->{'date'})
@@ -3144,6 +3273,24 @@ class Forecast {
      * @throws Exception
      */
     public static function from(stdClass $obj): Forecast {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'day')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'high')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'low')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Forecast(
          Forecast::fromCode($obj->{'code'})
         ,Forecast::fromDate($obj->{'date'})
@@ -3252,6 +3399,9 @@ class GUID {
      * @throws Exception
      */
     public static function from(stdClass $obj): GUID {
+        if (!property_exists($obj, 'isPermaLink')) {
+            throw new Exception("Missing required property");
+        }
         return new GUID(
          GUID::fromIsPermaLink($obj->{'isPermaLink'})
         );
@@ -3454,6 +3604,15 @@ class Location {
      * @throws Exception
      */
     public static function from(stdClass $obj): Location {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'region')) {
+            throw new Exception("Missing required property");
+        }
         return new Location(
          Location::fromCity($obj->{'city'})
         ,Location::fromCountry($obj->{'country'})
@@ -3712,6 +3871,18 @@ class Units {
      * @throws Exception
      */
     public static function from(stdClass $obj): Units {
+        if (!property_exists($obj, 'distance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temperature')) {
+            throw new Exception("Missing required property");
+        }
         return new Units(
          Units::fromDistance($obj->{'distance'})
         ,Units::fromPressure($obj->{'pressure'})
@@ -3920,6 +4091,15 @@ class Wind {
      * @throws Exception
      */
     public static function from(stdClass $obj): Wind {
+        if (!property_exists($obj, 'chill')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'direction')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
         return new Wind(
          Wind::fromChill($obj->{'chill'})
         ,Wind::fromDirection($obj->{'direction'})
diff --git a/base/php/test/inputs/json/misc/dc44f.json/default/TopLevel.php b/head/php/test/inputs/json/misc/dc44f.json/default/TopLevel.php
index 849692f..3f91c4f 100644
--- a/base/php/test/inputs/json/misc/dc44f.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/dc44f.json/default/TopLevel.php
@@ -628,6 +628,39 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'booster')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'border')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cards')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gathererCode')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'magicCardsInfoCode')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mkm_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mkm_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'releaseDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBooster($obj->{'booster'})
         ,TopLevel::fromBorder($obj->{'border'})
@@ -2407,6 +2440,45 @@ class Card {
      * @throws Exception
      */
     public static function from(stdClass $obj): Card {
+        if (!property_exists($obj, 'artist')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cmc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'imageName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'layout')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'legalities')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'multiverseid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'originalType')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'printings')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rarity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'types')) {
+            throw new Exception("Missing required property");
+        }
         return new Card(
          Card::fromArtist($obj->{'artist'})
         ,Card::fromCmc($obj->{'cmc'})
@@ -2778,6 +2850,12 @@ class LegalityElement {
      * @throws Exception
      */
     public static function from(stdClass $obj): LegalityElement {
+        if (!property_exists($obj, 'format')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'legality')) {
+            throw new Exception("Missing required property");
+        }
         return new LegalityElement(
          LegalityElement::fromFormat($obj->{'format'})
         ,LegalityElement::fromLegality($obj->{'legality'})
@@ -3201,6 +3279,12 @@ class Ruling {
      * @throws Exception
      */
     public static function from(stdClass $obj): Ruling {
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Ruling(
          Ruling::fromDate($obj->{'date'})
         ,Ruling::fromText($obj->{'text'})
diff --git a/base/php/test/inputs/json/misc/dd1ce.json/default/TopLevel.php b/head/php/test/inputs/json/misc/dd1ce.json/default/TopLevel.php
index 849692f..3f91c4f 100644
--- a/base/php/test/inputs/json/misc/dd1ce.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/dd1ce.json/default/TopLevel.php
@@ -628,6 +628,39 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'booster')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'border')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cards')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gathererCode')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'magicCardsInfoCode')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mkm_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mkm_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'releaseDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBooster($obj->{'booster'})
         ,TopLevel::fromBorder($obj->{'border'})
@@ -2407,6 +2440,45 @@ class Card {
      * @throws Exception
      */
     public static function from(stdClass $obj): Card {
+        if (!property_exists($obj, 'artist')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cmc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'imageName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'layout')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'legalities')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'multiverseid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'originalType')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'printings')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rarity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'types')) {
+            throw new Exception("Missing required property");
+        }
         return new Card(
          Card::fromArtist($obj->{'artist'})
         ,Card::fromCmc($obj->{'cmc'})
@@ -2778,6 +2850,12 @@ class LegalityElement {
      * @throws Exception
      */
     public static function from(stdClass $obj): LegalityElement {
+        if (!property_exists($obj, 'format')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'legality')) {
+            throw new Exception("Missing required property");
+        }
         return new LegalityElement(
          LegalityElement::fromFormat($obj->{'format'})
         ,LegalityElement::fromLegality($obj->{'legality'})
@@ -3201,6 +3279,12 @@ class Ruling {
      * @throws Exception
      */
     public static function from(stdClass $obj): Ruling {
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Ruling(
          Ruling::fromDate($obj->{'date'})
         ,Ruling::fromText($obj->{'text'})
diff --git a/base/php/test/inputs/json/misc/dec3a.json/default/TopLevel.php b/head/php/test/inputs/json/misc/dec3a.json/default/TopLevel.php
index c566773..59e8246 100644
--- a/base/php/test/inputs/json/misc/dec3a.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/dec3a.json/default/TopLevel.php
@@ -149,6 +149,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'metadata')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromMetadata($obj->{'metadata'})
         ,TopLevel::fromResults($obj->{'results'})
@@ -355,6 +361,15 @@ class Metadata {
      * @throws Exception
      */
     public static function from(stdClass $obj): Metadata {
+        if (!property_exists($obj, 'executionTime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'responseInfo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'resultset')) {
+            throw new Exception("Missing required property");
+        }
         return new Metadata(
          Metadata::fromExecutionTime($obj->{'executionTime'})
         ,Metadata::fromResponseInfo($obj->{'responseInfo'})
@@ -509,6 +524,12 @@ class ResponseInfo {
      * @throws Exception
      */
     public static function from(stdClass $obj): ResponseInfo {
+        if (!property_exists($obj, 'developerMessage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
         return new ResponseInfo(
          ResponseInfo::fromDeveloperMessage($obj->{'developerMessage'})
         ,ResponseInfo::fromStatus($obj->{'status'})
@@ -713,6 +734,15 @@ class Resultset {
      * @throws Exception
      */
     public static function from(stdClass $obj): Resultset {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'page')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pagesize')) {
+            throw new Exception("Missing required property");
+        }
         return new Resultset(
          Resultset::fromCount($obj->{'count'})
         ,Resultset::fromPage($obj->{'page'})
@@ -1927,6 +1957,72 @@ class Result {
      * @throws Exception
      */
     public static function from(stdClass $obj): Result {
+        if (!property_exists($obj, 'about_office')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'application_process')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'body')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'changed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'deadline')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hiring_office')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hiring_org')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'job_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'language')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'location')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_positions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'position')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'practice_area')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'qualifications')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'relocation_expenses')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'salary')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'travel')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uuid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'vuuid')) {
+            throw new Exception("Missing required property");
+        }
         return new Result(
          Result::fromAboutOffice($obj->{'about_office'})
         ,Result::fromApplicationProcess($obj->{'application_process'})
@@ -2122,6 +2218,12 @@ class HiringOrg {
      * @throws Exception
      */
     public static function from(stdClass $obj): HiringOrg {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uuid')) {
+            throw new Exception("Missing required property");
+        }
         return new HiringOrg(
          HiringOrg::fromName($obj->{'name'})
         ,HiringOrg::fromUUID($obj->{'uuid'})
@@ -2693,6 +2795,36 @@ class Location {
      * @throws Exception
      */
     public static function from(stdClass $obj): Location {
+        if (!property_exists($obj, 'administrative_area')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fax_number')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locality')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mobile_number')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'phone_number')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'phone_number_extension')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'postal_code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sub_premise')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thoroughfare')) {
+            throw new Exception("Missing required property");
+        }
         return new Location(
          Location::fromAdministrativeArea($obj->{'administrative_area'})
         ,Location::fromCountry($obj->{'country'})
diff --git a/base/php/test/inputs/json/misc/df957.json/default/TopLevel.php b/head/php/test/inputs/json/misc/df957.json/default/TopLevel.php
index 94c8a8d..51996fe 100644
--- a/base/php/test/inputs/json/misc/df957.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/df957.json/default/TopLevel.php
@@ -85,6 +85,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'query')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromQuery($obj->{'query'})
         );
@@ -347,6 +350,18 @@ class Query {
      * @throws Exception
      */
     public static function from(stdClass $obj): Query {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lang')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new Query(
          Query::fromCount($obj->{'count'})
         ,Query::fromCreated($obj->{'created'})
@@ -452,6 +467,9 @@ class Results {
      * @throws Exception
      */
     public static function from(stdClass $obj): Results {
+        if (!property_exists($obj, 'channel')) {
+            throw new Exception("Missing required property");
+        }
         return new Results(
          Results::fromChannel($obj->{'channel'})
         );
@@ -1181,6 +1199,45 @@ class Channel {
      * @throws Exception
      */
     public static function from(stdClass $obj): Channel {
+        if (!property_exists($obj, 'astronomy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'atmosphere')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'image')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'language')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lastBuildDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'location')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ttl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'units')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Channel(
          Channel::fromAstronomy($obj->{'astronomy'})
         ,Channel::fromAtmosphere($obj->{'atmosphere'})
@@ -1355,6 +1412,12 @@ class Astronomy {
      * @throws Exception
      */
     public static function from(stdClass $obj): Astronomy {
+        if (!property_exists($obj, 'sunrise')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sunset')) {
+            throw new Exception("Missing required property");
+        }
         return new Astronomy(
          Astronomy::fromSunrise($obj->{'sunrise'})
         ,Astronomy::fromSunset($obj->{'sunset'})
@@ -1611,6 +1674,18 @@ class Atmosphere {
      * @throws Exception
      */
     public static function from(stdClass $obj): Atmosphere {
+        if (!property_exists($obj, 'humidity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rising')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
         return new Atmosphere(
          Atmosphere::fromHumidity($obj->{'humidity'})
         ,Atmosphere::fromPressure($obj->{'pressure'})
@@ -1923,6 +1998,21 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromHeight($obj->{'height'})
         ,Image::fromLink($obj->{'link'})
@@ -2459,6 +2549,33 @@ class Item {
      * @throws Exception
      */
     public static function from(stdClass $obj): Item {
+        if (!property_exists($obj, 'condition')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forecast')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'guid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'long')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pubDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
         return new Item(
          Item::fromCondition($obj->{'condition'})
         ,Item::fromDescription($obj->{'description'})
@@ -2729,6 +2846,18 @@ class Condition {
      * @throws Exception
      */
     public static function from(stdClass $obj): Condition {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Condition(
          Condition::fromCode($obj->{'code'})
         ,Condition::fromDate($obj->{'date'})
@@ -3093,6 +3222,24 @@ class Forecast {
      * @throws Exception
      */
     public static function from(stdClass $obj): Forecast {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'day')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'high')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'low')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Forecast(
          Forecast::fromCode($obj->{'code'})
         ,Forecast::fromDate($obj->{'date'})
@@ -3201,6 +3348,9 @@ class GUID {
      * @throws Exception
      */
     public static function from(stdClass $obj): GUID {
+        if (!property_exists($obj, 'isPermaLink')) {
+            throw new Exception("Missing required property");
+        }
         return new GUID(
          GUID::fromIsPermaLink($obj->{'isPermaLink'})
         );
@@ -3403,6 +3553,15 @@ class Location {
      * @throws Exception
      */
     public static function from(stdClass $obj): Location {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'region')) {
+            throw new Exception("Missing required property");
+        }
         return new Location(
          Location::fromCity($obj->{'city'})
         ,Location::fromCountry($obj->{'country'})
@@ -3661,6 +3820,18 @@ class Units {
      * @throws Exception
      */
     public static function from(stdClass $obj): Units {
+        if (!property_exists($obj, 'distance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temperature')) {
+            throw new Exception("Missing required property");
+        }
         return new Units(
          Units::fromDistance($obj->{'distance'})
         ,Units::fromPressure($obj->{'pressure'})
@@ -3869,6 +4040,15 @@ class Wind {
      * @throws Exception
      */
     public static function from(stdClass $obj): Wind {
+        if (!property_exists($obj, 'chill')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'direction')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
         return new Wind(
          Wind::fromChill($obj->{'chill'})
         ,Wind::fromDirection($obj->{'direction'})
diff --git a/base/php/test/inputs/json/misc/e0ac7.json/default/TopLevel.php b/head/php/test/inputs/json/misc/e0ac7.json/default/TopLevel.php
index 3d11862..e922735 100644
--- a/base/php/test/inputs/json/misc/e0ac7.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/e0ac7.json/default/TopLevel.php
@@ -202,6 +202,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pagination')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromMeta($obj->{'meta'})
@@ -1202,6 +1211,57 @@ class Datum {
      * @throws Exception
      */
     public static function from(stdClass $obj): Datum {
+        if (!property_exists($obj, 'bitly_gif_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bitly_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'content_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'embed_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'images')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'import_datetime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_indexable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rating')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'slug')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source_post_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source_tld')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trending_datetime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'username')) {
+            throw new Exception("Missing required property");
+        }
         return new Datum(
          Datum::fromBitlyGIFURL($obj->{'bitly_gif_url'})
         ,Datum::fromBitlyURL($obj->{'bitly_url'})
@@ -2511,6 +2571,72 @@ class Images {
      * @throws Exception
      */
     public static function from(stdClass $obj): Images {
+        if (!property_exists($obj, 'downsized')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_large')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_medium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_downsampled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_small_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_downsampled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_small_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'looping')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original_mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview_gif')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview_webp')) {
+            throw new Exception("Missing required property");
+        }
         return new Images(
          Images::fromDownsized($obj->{'downsized'})
         ,Images::fromDownsizedLarge($obj->{'downsized_large'})
@@ -2819,6 +2945,15 @@ class Downsized {
      * @throws Exception
      */
     public static function from(stdClass $obj): Downsized {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Downsized(
          Downsized::fromHeight($obj->{'height'})
         ,Downsized::fromSize($obj->{'size'})
@@ -3079,6 +3214,18 @@ class DownsizedSmall {
      * @throws Exception
      */
     public static function from(stdClass $obj): DownsizedSmall {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4_size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new DownsizedSmall(
          DownsizedSmall::fromHeight($obj->{'height'})
         ,DownsizedSmall::fromMp4($obj->{'mp4'})
@@ -3691,6 +3838,24 @@ class FixedHeight {
      * @throws Exception
      */
     public static function from(stdClass $obj): FixedHeight {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'webp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'webp_size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new FixedHeight(
          FixedHeight::fromFrames($obj->{'frames'})
         ,FixedHeight::fromHash($obj->{'hash'})
@@ -3859,6 +4024,12 @@ class Looping {
      * @throws Exception
      */
     public static function from(stdClass $obj): Looping {
+        if (!property_exists($obj, 'mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4_size')) {
+            throw new Exception("Missing required property");
+        }
         return new Looping(
          Looping::fromMp4($obj->{'mp4'})
         ,Looping::fromMp4Size($obj->{'mp4_size'})
@@ -4317,6 +4488,24 @@ class User {
      * @throws Exception
      */
     public static function from(stdClass $obj): User {
+        if (!property_exists($obj, 'avatar_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banner_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'display_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profile_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'twitter')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'username')) {
+            throw new Exception("Missing required property");
+        }
         return new User(
          User::fromAvatarURL($obj->{'avatar_url'})
         ,User::fromBannerURL($obj->{'banner_url'})
@@ -4529,6 +4718,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'msg')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'response_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromMsg($obj->{'msg'})
         ,Meta::fromResponseID($obj->{'response_id'})
@@ -4735,6 +4933,15 @@ class Pagination {
      * @throws Exception
      */
     public static function from(stdClass $obj): Pagination {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'offset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total_count')) {
+            throw new Exception("Missing required property");
+        }
         return new Pagination(
          Pagination::fromCount($obj->{'count'})
         ,Pagination::fromOffset($obj->{'offset'})
diff --git a/base/php/test/inputs/json/misc/e2915.json/default/TopLevel.php b/head/php/test/inputs/json/misc/e2915.json/default/TopLevel.php
index a8d0614..f5b3cbb 100644
--- a/base/php/test/inputs/json/misc/e2915.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/e2915.json/default/TopLevel.php
@@ -85,6 +85,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'query')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromQuery($obj->{'query'})
         );
@@ -347,6 +350,18 @@ class Query {
      * @throws Exception
      */
     public static function from(stdClass $obj): Query {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lang')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new Query(
          Query::fromCount($obj->{'count'})
         ,Query::fromCreated($obj->{'created'})
@@ -452,6 +467,9 @@ class Results {
      * @throws Exception
      */
     public static function from(stdClass $obj): Results {
+        if (!property_exists($obj, 'channel')) {
+            throw new Exception("Missing required property");
+        }
         return new Results(
          Results::fromChannel($obj->{'channel'})
         );
@@ -1181,6 +1199,45 @@ class Channel {
      * @throws Exception
      */
     public static function from(stdClass $obj): Channel {
+        if (!property_exists($obj, 'astronomy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'atmosphere')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'image')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'language')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lastBuildDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'location')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ttl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'units')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wind')) {
+            throw new Exception("Missing required property");
+        }
         return new Channel(
          Channel::fromAstronomy($obj->{'astronomy'})
         ,Channel::fromAtmosphere($obj->{'atmosphere'})
@@ -1355,6 +1412,12 @@ class Astronomy {
      * @throws Exception
      */
     public static function from(stdClass $obj): Astronomy {
+        if (!property_exists($obj, 'sunrise')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sunset')) {
+            throw new Exception("Missing required property");
+        }
         return new Astronomy(
          Astronomy::fromSunrise($obj->{'sunrise'})
         ,Astronomy::fromSunset($obj->{'sunset'})
@@ -1611,6 +1674,18 @@ class Atmosphere {
      * @throws Exception
      */
     public static function from(stdClass $obj): Atmosphere {
+        if (!property_exists($obj, 'humidity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rising')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visibility')) {
+            throw new Exception("Missing required property");
+        }
         return new Atmosphere(
          Atmosphere::fromHumidity($obj->{'humidity'})
         ,Atmosphere::fromPressure($obj->{'pressure'})
@@ -1923,6 +1998,21 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromHeight($obj->{'height'})
         ,Image::fromLink($obj->{'link'})
@@ -2459,6 +2549,33 @@ class Item {
      * @throws Exception
      */
     public static function from(stdClass $obj): Item {
+        if (!property_exists($obj, 'condition')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forecast')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'guid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'long')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pubDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
         return new Item(
          Item::fromCondition($obj->{'condition'})
         ,Item::fromDescription($obj->{'description'})
@@ -2729,6 +2846,18 @@ class Condition {
      * @throws Exception
      */
     public static function from(stdClass $obj): Condition {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Condition(
          Condition::fromCode($obj->{'code'})
         ,Condition::fromDate($obj->{'date'})
@@ -3094,6 +3223,24 @@ class Forecast {
      * @throws Exception
      */
     public static function from(stdClass $obj): Forecast {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'day')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'high')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'low')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Forecast(
          Forecast::fromCode($obj->{'code'})
         ,Forecast::fromDate($obj->{'date'})
@@ -3247,6 +3394,9 @@ class GUID {
      * @throws Exception
      */
     public static function from(stdClass $obj): GUID {
+        if (!property_exists($obj, 'isPermaLink')) {
+            throw new Exception("Missing required property");
+        }
         return new GUID(
          GUID::fromIsPermaLink($obj->{'isPermaLink'})
         );
@@ -3449,6 +3599,15 @@ class Location {
      * @throws Exception
      */
     public static function from(stdClass $obj): Location {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'region')) {
+            throw new Exception("Missing required property");
+        }
         return new Location(
          Location::fromCity($obj->{'city'})
         ,Location::fromCountry($obj->{'country'})
@@ -3707,6 +3866,18 @@ class Units {
      * @throws Exception
      */
     public static function from(stdClass $obj): Units {
+        if (!property_exists($obj, 'distance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pressure')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'temperature')) {
+            throw new Exception("Missing required property");
+        }
         return new Units(
          Units::fromDistance($obj->{'distance'})
         ,Units::fromPressure($obj->{'pressure'})
@@ -3915,6 +4086,15 @@ class Wind {
      * @throws Exception
      */
     public static function from(stdClass $obj): Wind {
+        if (!property_exists($obj, 'chill')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'direction')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'speed')) {
+            throw new Exception("Missing required property");
+        }
         return new Wind(
          Wind::fromChill($obj->{'chill'})
         ,Wind::fromDirection($obj->{'direction'})
diff --git a/base/php/test/inputs/json/misc/e2a58.json/default/TopLevel.php b/head/php/test/inputs/json/misc/e2a58.json/default/TopLevel.php
index c3181f3..69565fe 100644
--- a/base/php/test/inputs/json/misc/e2a58.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/e2a58.json/default/TopLevel.php
@@ -150,6 +150,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stop-and-search')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromDate($obj->{'date'})
         ,TopLevel::fromStopAndSearch($obj->{'stop-and-search'})
diff --git a/base/php/test/inputs/json/misc/e324e.json/default/TopLevel.php b/head/php/test/inputs/json/misc/e324e.json/default/TopLevel.php
index d2c3fe5..cf84316 100644
--- a/base/php/test/inputs/json/misc/e324e.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/e324e.json/default/TopLevel.php
@@ -479,6 +479,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'basePath')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'definitions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'host')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'info')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'paths')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'produces')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'schemes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'swagger')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBasePath($obj->{'basePath'})
         ,TopLevel::fromDefinitions($obj->{'definitions'})
@@ -592,6 +616,9 @@ class Definitions {
      * @throws Exception
      */
     public static function from(stdClass $obj): Definitions {
+        if (!property_exists($obj, 'Rate')) {
+            throw new Exception("Missing required property");
+        }
         return new Definitions(
          Definitions::fromRate($obj->{'Rate'})
         );
@@ -705,6 +732,9 @@ class Rate {
      * @throws Exception
      */
     public static function from(stdClass $obj): Rate {
+        if (!property_exists($obj, 'properties')) {
+            throw new Exception("Missing required property");
+        }
         return new Rate(
          Rate::fromProperties($obj->{'properties'})
         );
@@ -856,6 +886,12 @@ class Property {
      * @throws Exception
      */
     public static function from(stdClass $obj): Property {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Property(
          Property::fromDescription($obj->{'description'})
         ,Property::fromType($obj->{'type'})
@@ -1105,6 +1141,15 @@ class Info {
      * @throws Exception
      */
     public static function from(stdClass $obj): Info {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'version')) {
+            throw new Exception("Missing required property");
+        }
         return new Info(
          Info::fromDescription($obj->{'description'})
         ,Info::fromTitle($obj->{'title'})
@@ -1208,6 +1253,9 @@ class Paths {
      * @throws Exception
      */
     public static function from(stdClass $obj): Paths {
+        if (!property_exists($obj, '/tariff_rates/search')) {
+            throw new Exception("Missing required property");
+        }
         return new Paths(
          Paths::fromTariffRatesSearch($obj->{'/tariff_rates/search'})
         );
@@ -1307,6 +1355,9 @@ class TariffRatesSearch {
      * @throws Exception
      */
     public static function from(stdClass $obj): TariffRatesSearch {
+        if (!property_exists($obj, 'get')) {
+            throw new Exception("Missing required property");
+        }
         return new TariffRatesSearch(
          TariffRatesSearch::fromGet($obj->{'get'})
         );
@@ -1640,6 +1691,21 @@ class Get {
      * @throws Exception
      */
     public static function from(stdClass $obj): Get {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'parameters')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'responses')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'summary')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tags')) {
+            throw new Exception("Missing required property");
+        }
         return new Get(
          Get::fromDescription($obj->{'description'})
         ,Get::fromParameters($obj->{'parameters'})
@@ -2008,6 +2074,24 @@ class Parameter {
      * @throws Exception
      */
     public static function from(stdClass $obj): Parameter {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'format')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'in')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'required')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Parameter(
          Parameter::fromDescription($obj->{'description'})
         ,Parameter::fromFormat($obj->{'format'})
@@ -2117,6 +2201,9 @@ class Responses {
      * @throws Exception
      */
     public static function from(stdClass $obj): Responses {
+        if (!property_exists($obj, '200')) {
+            throw new Exception("Missing required property");
+        }
         return new Responses(
          Responses::fromThe200($obj->{'200'})
         );
@@ -2268,6 +2355,12 @@ class The200 {
      * @throws Exception
      */
     public static function from(stdClass $obj): The200 {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'schema')) {
+            throw new Exception("Missing required property");
+        }
         return new The200(
          The200::fromDescription($obj->{'description'})
         ,The200::fromSchema($obj->{'schema'})
@@ -2421,6 +2514,12 @@ class Schema {
      * @throws Exception
      */
     public static function from(stdClass $obj): Schema {
+        if (!property_exists($obj, 'items')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Schema(
          Schema::fromItems($obj->{'items'})
         ,Schema::fromType($obj->{'type'})
@@ -2521,6 +2620,9 @@ class Items {
      * @throws Exception
      */
     public static function from(stdClass $obj): Items {
+        if (!property_exists($obj, '$ref')) {
+            throw new Exception("Missing required property");
+        }
         return new Items(
          Items::fromRef($obj->{'$ref'})
         );
diff --git a/base/php/test/inputs/json/misc/e64a0.json/default/TopLevel.php b/head/php/test/inputs/json/misc/e64a0.json/default/TopLevel.php
index 5348b6c..ac6abe4 100644
--- a/base/php/test/inputs/json/misc/e64a0.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/e64a0.json/default/TopLevel.php
@@ -242,6 +242,18 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'args')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'headers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'origin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromArgs($obj->{'args'})
         ,TopLevel::fromHeaders($obj->{'headers'})
@@ -547,6 +559,18 @@ class Headers {
      * @throws Exception
      */
     public static function from(stdClass $obj): Headers {
+        if (!property_exists($obj, 'Accept-Encoding')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Connection')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Host')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'User-Agent')) {
+            throw new Exception("Missing required property");
+        }
         return new Headers(
          Headers::fromAcceptEncoding($obj->{'Accept-Encoding'})
         ,Headers::fromConnection($obj->{'Connection'})
diff --git a/base/php/test/inputs/json/misc/e8a0b.json/default/TopLevel.php b/head/php/test/inputs/json/misc/e8a0b.json/default/TopLevel.php
index 0dc389d..28c6e23 100644
--- a/base/php/test/inputs/json/misc/e8a0b.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/e8a0b.json/default/TopLevel.php
@@ -345,6 +345,24 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'age')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'females')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'males')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'year')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromAge($obj->{'age'})
         ,TopLevel::fromCountry($obj->{'country'})
diff --git a/base/php/test/inputs/json/misc/e8b04.json/default/TopLevel.php b/head/php/test/inputs/json/misc/e8b04.json/default/TopLevel.php
index fdcacc3..5c66fdd 100644
--- a/base/php/test/inputs/json/misc/e8b04.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/e8b04.json/default/TopLevel.php
@@ -2322,6 +2322,81 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'averageRating')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'createdAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downloadCount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'grants')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hideFromCatalog')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hideFromDataJson')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locale')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'metadata')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'newBackend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'numberOfComments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'oid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'owner')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'provenance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationAppendEnabled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationGroup')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationStage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rights')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tableAuthor')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tableId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'totalTimesRated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewCount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewLastModified')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewType')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromAverageRating($obj->{'averageRating'})
         ,TopLevel::fromCategory($obj->{'category'})
@@ -2725,6 +2800,15 @@ class Grant {
      * @throws Exception
      */
     public static function from(stdClass $obj): Grant {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'inherited')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Grant(
          Grant::fromFlags($obj->{'flags'})
         ,Grant::fromInherited($obj->{'inherited'})
@@ -3619,6 +3703,9 @@ class CustomFields {
      * @throws Exception
      */
     public static function from(stdClass $obj): CustomFields {
+        if (!property_exists($obj, 'TEST')) {
+            throw new Exception("Missing required property");
+        }
         return new CustomFields(
          CustomFields::fromTest($obj->{'TEST'})
         );
@@ -3717,6 +3804,9 @@ class Test {
      * @throws Exception
      */
     public static function from(stdClass $obj): Test {
+        if (!property_exists($obj, 'CFPB1')) {
+            throw new Exception("Missing required property");
+        }
         return new Test(
          Test::fromCfpb1($obj->{'CFPB1'})
         );
@@ -4152,6 +4242,9 @@ class Group {
      * @throws Exception
      */
     public static function from(stdClass $obj): Group {
+        if (!property_exists($obj, 'columnFieldName')) {
+            throw new Exception("Missing required property");
+        }
         return new Group(
          Group::fromColumnFieldName($obj->{'columnFieldName'})
         );
@@ -4303,6 +4396,12 @@ class Order {
      * @throws Exception
      */
     public static function from(stdClass $obj): Order {
+        if (!property_exists($obj, 'ascending')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'columnFieldName')) {
+            throw new Exception("Missing required property");
+        }
         return new Order(
          Order::fromAscending($obj->{'ascending'})
         ,Order::fromColumnFieldName($obj->{'columnFieldName'})
@@ -4518,6 +4617,9 @@ class Select {
      * @throws Exception
      */
     public static function from(stdClass $obj): Select {
+        if (!property_exists($obj, 'columnFieldName')) {
+            throw new Exception("Missing required property");
+        }
         return new Select(
          Select::fromAggregate($obj->{'aggregate'})
         ,Select::fromColumnFieldName($obj->{'columnFieldName'})
@@ -4881,6 +4983,9 @@ class Where {
      * @throws Exception
      */
     public static function from(stdClass $obj): Where {
+        if (!property_exists($obj, 'operator')) {
+            throw new Exception("Missing required property");
+        }
         return new Where(
          Where::fromChildren($obj->{'children'})
         ,Where::fromColumnFieldName($obj->{'columnFieldName'})
@@ -5166,6 +5271,12 @@ class Child {
      * @throws Exception
      */
     public static function from(stdClass $obj): Child {
+        if (!property_exists($obj, 'columnFieldName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'operator')) {
+            throw new Exception("Missing required property");
+        }
         return new Child(
          Child::fromColumnFieldName($obj->{'columnFieldName'})
         ,Child::fromMetadata($obj->{'metadata'})
@@ -5820,6 +5931,9 @@ class TableColumnID {
      * @throws Exception
      */
     public static function from(stdClass $obj): TableColumnID {
+        if (!property_exists($obj, '2819740')) {
+            throw new Exception("Missing required property");
+        }
         return new TableColumnID(
          TableColumnID::fromThe2819740($obj->{'2819740'})
         );
@@ -6017,6 +6131,9 @@ class MetadataRenderTypeConfig {
      * @throws Exception
      */
     public static function from(stdClass $obj): MetadataRenderTypeConfig {
+        if (!property_exists($obj, 'visible')) {
+            throw new Exception("Missing required property");
+        }
         return new MetadataRenderTypeConfig(
          MetadataRenderTypeConfig::fromVisible($obj->{'visible'})
         );
@@ -6288,6 +6405,9 @@ class RichRendererConfigs {
      * @throws Exception
      */
     public static function from(stdClass $obj): RichRendererConfigs {
+        if (!property_exists($obj, 'fatRow')) {
+            throw new Exception("Missing required property");
+        }
         return new RichRendererConfigs(
          RichRendererConfigs::fromFatRow($obj->{'fatRow'})
         );
@@ -6398,6 +6518,9 @@ class FatRow {
      * @throws Exception
      */
     public static function from(stdClass $obj): FatRow {
+        if (!property_exists($obj, 'columns')) {
+            throw new Exception("Missing required property");
+        }
         return new FatRow(
          FatRow::fromColumns($obj->{'columns'})
         );
@@ -6561,6 +6684,12 @@ class Column {
      * @throws Exception
      */
     public static function from(stdClass $obj): Column {
+        if (!property_exists($obj, 'rows')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'styles')) {
+            throw new Exception("Missing required property");
+        }
         return new Column(
          Column::fromRows($obj->{'rows'})
         ,Column::fromStyles($obj->{'styles'})
@@ -6673,6 +6802,9 @@ class Row {
      * @throws Exception
      */
     public static function from(stdClass $obj): Row {
+        if (!property_exists($obj, 'fields')) {
+            throw new Exception("Missing required property");
+        }
         return new Row(
          Row::fromFields($obj->{'fields'})
         );
@@ -6824,6 +6956,12 @@ class Field {
      * @throws Exception
      */
     public static function from(stdClass $obj): Field {
+        if (!property_exists($obj, 'tableColumnId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Field(
          Field::fromTableColumnID($obj->{'tableColumnId'})
         ,Field::fromType($obj->{'type'})
@@ -6974,6 +7112,9 @@ class Styles {
      * @throws Exception
      */
     public static function from(stdClass $obj): Styles {
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Styles(
          Styles::fromWidth($obj->{'width'})
         );
@@ -7235,6 +7376,15 @@ class V1ArchivedProperties {
      * @throws Exception
      */
     public static function from(stdClass $obj): V1ArchivedProperties {
+        if (!property_exists($obj, 'accessPoints')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'blist_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'renderTypeConfig')) {
+            throw new Exception("Missing required property");
+        }
         return new V1ArchivedProperties(
          V1ArchivedProperties::fromAccessPoints($obj->{'accessPoints'})
         ,V1ArchivedProperties::fromBlistID($obj->{'blist_id'})
@@ -7337,6 +7487,9 @@ class AccessPoints {
      * @throws Exception
      */
     public static function from(stdClass $obj): AccessPoints {
+        if (!property_exists($obj, 'new_view')) {
+            throw new Exception("Missing required property");
+        }
         return new AccessPoints(
          AccessPoints::fromNewView($obj->{'new_view'})
         );
@@ -7436,6 +7589,9 @@ class V1ArchivedPropertiesRenderTypeConfig {
      * @throws Exception
      */
     public static function from(stdClass $obj): V1ArchivedPropertiesRenderTypeConfig {
+        if (!property_exists($obj, 'visible')) {
+            throw new Exception("Missing required property");
+        }
         return new V1ArchivedPropertiesRenderTypeConfig(
          V1ArchivedPropertiesRenderTypeConfig::fromVisible($obj->{'visible'})
         );
@@ -7534,6 +7690,9 @@ class FluffyVisible {
      * @throws Exception
      */
     public static function from(stdClass $obj): FluffyVisible {
+        if (!property_exists($obj, 'href')) {
+            throw new Exception("Missing required property");
+        }
         return new FluffyVisible(
          FluffyVisible::fromHref($obj->{'href'})
         );
@@ -8244,6 +8403,15 @@ class Owner {
      * @throws Exception
      */
     public static function from(stdClass $obj): Owner {
+        if (!property_exists($obj, 'displayName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'screenName')) {
+            throw new Exception("Missing required property");
+        }
         return new Owner(
          Owner::fromDisplayName($obj->{'displayName'})
         ,Owner::fromFlags($obj->{'flags'})
@@ -8499,6 +8667,9 @@ class Ratings {
      * @throws Exception
      */
     public static function from(stdClass $obj): Ratings {
+        if (!property_exists($obj, 'rating')) {
+            throw new Exception("Missing required property");
+        }
         return new Ratings(
          Ratings::fromRating($obj->{'rating'})
         );
@@ -8942,6 +9113,15 @@ class TableAuthor {
      * @throws Exception
      */
     public static function from(stdClass $obj): TableAuthor {
+        if (!property_exists($obj, 'displayName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'screenName')) {
+            throw new Exception("Missing required property");
+        }
         return new TableAuthor(
          TableAuthor::fromDisplayName($obj->{'displayName'})
         ,TableAuthor::fromID($obj->{'id'})
diff --git a/base/php/test/inputs/json/misc/f22f5.json/default/TopLevel.php b/head/php/test/inputs/json/misc/f22f5.json/default/TopLevel.php
index a11115c..9912d7f 100644
--- a/base/php/test/inputs/json/misc/f22f5.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/f22f5.json/default/TopLevel.php
@@ -137,6 +137,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromKind($obj->{'kind'})
@@ -408,6 +414,18 @@ class TopLevelData {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevelData {
+        if (!property_exists($obj, 'after')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'before')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'children')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'modhash')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevelData(
          TopLevelData::fromAfter($obj->{'after'})
         ,TopLevelData::fromBefore($obj->{'before'})
@@ -566,6 +584,12 @@ class Child {
      * @throws Exception
      */
     public static function from(stdClass $obj): Child {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new Child(
          Child::fromData($obj->{'data'})
         ,Child::fromKind($obj->{'kind'})
@@ -3830,6 +3854,186 @@ class ChildData {
      * @throws Exception
      */
     public static function from(stdClass $obj): ChildData {
+        if (!property_exists($obj, 'approved_at_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'approved_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'archived')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author_flair_css_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author_flair_text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banned_at_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banned_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'brand_safe')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'can_gild')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'can_mod_post')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'clicked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'contest_mode')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'distinguished')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'domain')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downs')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'edited')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gilded')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hidden')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hide_score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_self')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_video')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'likes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link_flair_css_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link_flair_text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'media')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'media_embed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mod_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'over_18')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'permalink')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'quarantine')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'removal_reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'report_reasons')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'saved')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'secure_media')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'secure_media_embed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'selftext')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'selftext_html')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'spoiler')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stickied')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_name_prefixed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'suggested_sort')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ups')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'user_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'view_count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visited')) {
+            throw new Exception("Missing required property");
+        }
         return new ChildData(
          ChildData::fromApprovedAtUTC($obj->{'approved_at_utc'})
         ,ChildData::fromApprovedBy($obj->{'approved_by'})
diff --git a/base/php/test/inputs/json/misc/f3139.json/default/TopLevel.php b/head/php/test/inputs/json/misc/f3139.json/default/TopLevel.php
index a7b3faa..df19504 100644
--- a/base/php/test/inputs/json/misc/f3139.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/f3139.json/default/TopLevel.php
@@ -136,6 +136,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromID($obj->{'id'})
         ,TopLevel::fromName($obj->{'name'})
diff --git a/base/php/test/inputs/json/misc/f3edf.json/default/TopLevel.php b/head/php/test/inputs/json/misc/f3edf.json/default/TopLevel.php
index 0dc389d..28c6e23 100644
--- a/base/php/test/inputs/json/misc/f3edf.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/f3edf.json/default/TopLevel.php
@@ -345,6 +345,24 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'age')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'females')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'males')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'year')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromAge($obj->{'age'})
         ,TopLevel::fromCountry($obj->{'country'})
diff --git a/base/php/test/inputs/json/misc/f466a.json/default/TopLevel.php b/head/php/test/inputs/json/misc/f466a.json/default/TopLevel.php
index 0dc389d..28c6e23 100644
--- a/base/php/test/inputs/json/misc/f466a.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/f466a.json/default/TopLevel.php
@@ -345,6 +345,24 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'age')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'females')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'males')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'year')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromAge($obj->{'age'})
         ,TopLevel::fromCountry($obj->{'country'})
diff --git a/base/php/test/inputs/json/misc/f6a65.json/default/TopLevel.php b/head/php/test/inputs/json/misc/f6a65.json/default/TopLevel.php
index 69892f5..a3961f8 100644
--- a/base/php/test/inputs/json/misc/f6a65.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/f6a65.json/default/TopLevel.php
@@ -202,6 +202,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pagination')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromMeta($obj->{'meta'})
@@ -1203,6 +1212,57 @@ class Datum {
      * @throws Exception
      */
     public static function from(stdClass $obj): Datum {
+        if (!property_exists($obj, 'bitly_gif_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bitly_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'content_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'embed_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'images')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'import_datetime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_indexable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rating')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'slug')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source_post_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source_tld')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trending_datetime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'username')) {
+            throw new Exception("Missing required property");
+        }
         return new Datum(
          Datum::fromBitlyGIFURL($obj->{'bitly_gif_url'})
         ,Datum::fromBitlyURL($obj->{'bitly_url'})
@@ -2512,6 +2572,72 @@ class Images {
      * @throws Exception
      */
     public static function from(stdClass $obj): Images {
+        if (!property_exists($obj, 'downsized')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_large')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_medium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downsized_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_downsampled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_small_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_height_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_downsampled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_small')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_small_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed_width_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'looping')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original_mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'original_still')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview_gif')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview_webp')) {
+            throw new Exception("Missing required property");
+        }
         return new Images(
          Images::fromDownsized($obj->{'downsized'})
         ,Images::fromDownsizedLarge($obj->{'downsized_large'})
@@ -2820,6 +2946,15 @@ class Downsized {
      * @throws Exception
      */
     public static function from(stdClass $obj): Downsized {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Downsized(
          Downsized::fromHeight($obj->{'height'})
         ,Downsized::fromSize($obj->{'size'})
@@ -3080,6 +3215,18 @@ class DownsizedSmall {
      * @throws Exception
      */
     public static function from(stdClass $obj): DownsizedSmall {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4_size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new DownsizedSmall(
          DownsizedSmall::fromHeight($obj->{'height'})
         ,DownsizedSmall::fromMp4($obj->{'mp4'})
@@ -3692,6 +3839,24 @@ class FixedHeight {
      * @throws Exception
      */
     public static function from(stdClass $obj): FixedHeight {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'webp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'webp_size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new FixedHeight(
          FixedHeight::fromFrames($obj->{'frames'})
         ,FixedHeight::fromHash($obj->{'hash'})
@@ -3860,6 +4025,12 @@ class Looping {
      * @throws Exception
      */
     public static function from(stdClass $obj): Looping {
+        if (!property_exists($obj, 'mp4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mp4_size')) {
+            throw new Exception("Missing required property");
+        }
         return new Looping(
          Looping::fromMp4($obj->{'mp4'})
         ,Looping::fromMp4Size($obj->{'mp4_size'})
@@ -4323,6 +4494,24 @@ class User {
      * @throws Exception
      */
     public static function from(stdClass $obj): User {
+        if (!property_exists($obj, 'avatar_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banner_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'display_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profile_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'twitter')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'username')) {
+            throw new Exception("Missing required property");
+        }
         return new User(
          User::fromAvatarURL($obj->{'avatar_url'})
         ,User::fromBannerURL($obj->{'banner_url'})
@@ -4592,6 +4781,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'msg')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'response_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromMsg($obj->{'msg'})
         ,Meta::fromResponseID($obj->{'response_id'})
@@ -4798,6 +4996,15 @@ class Pagination {
      * @throws Exception
      */
     public static function from(stdClass $obj): Pagination {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'offset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total_count')) {
+            throw new Exception("Missing required property");
+        }
         return new Pagination(
          Pagination::fromCount($obj->{'count'})
         ,Pagination::fromOffset($obj->{'offset'})
diff --git a/base/php/test/inputs/json/misc/f74d5.json/default/TopLevel.php b/head/php/test/inputs/json/misc/f74d5.json/default/TopLevel.php
index e0aa463..c938af2 100644
--- a/base/php/test/inputs/json/misc/f74d5.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/f74d5.json/default/TopLevel.php
@@ -182,6 +182,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromMeta($obj->{'meta'})
@@ -283,6 +289,9 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'view')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromView($obj->{'view'})
         );
@@ -2310,6 +2319,117 @@ class View {
      * @throws Exception
      */
     public static function from(stdClass $obj): View {
+        if (!property_exists($obj, 'averageRating')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'category')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'columns')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'createdAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'displayType')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downloadCount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'grants')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hideFromCatalog')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hideFromDataJson')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'indexUpdatedAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'license')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'licenseId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locale')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'metadata')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'newBackend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'numberOfComments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'oid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'owner')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'provenance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationAppendEnabled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationGroup')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationStage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'query')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rights')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowClass')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowsUpdatedAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowsUpdatedBy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tableAuthor')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tableId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'totalTimesRated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewCount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewLastModified')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewType')) {
+            throw new Exception("Missing required property");
+        }
         return new View(
          View::fromAverageRating($obj->{'averageRating'})
         ,View::fromCategory($obj->{'category'})
@@ -3058,6 +3178,27 @@ class Column {
      * @throws Exception
      */
     public static function from(stdClass $obj): Column {
+        if (!property_exists($obj, 'dataTypeName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fieldName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'format')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'position')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'renderTypeName')) {
+            throw new Exception("Missing required property");
+        }
         return new Column(
          Column::fromCachedContents($obj->{'cachedContents'})
         ,Column::fromDataTypeName($obj->{'dataTypeName'})
@@ -3520,6 +3661,21 @@ class CachedContents {
      * @throws Exception
      */
     public static function from(stdClass $obj): CachedContents {
+        if (!property_exists($obj, 'largest')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'non_null')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'null')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'smallest')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'top')) {
+            throw new Exception("Missing required property");
+        }
         return new CachedContents(
          CachedContents::fromAverage($obj->{'average'})
         ,CachedContents::fromLargest($obj->{'largest'})
@@ -3682,6 +3838,12 @@ class Top {
      * @throws Exception
      */
     public static function from(stdClass $obj): Top {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
         return new Top(
          Top::fromCount($obj->{'count'})
         ,Top::fromItem($obj->{'item'})
@@ -3998,6 +4160,15 @@ class Grant {
      * @throws Exception
      */
     public static function from(stdClass $obj): Grant {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'inherited')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Grant(
          Grant::fromFlags($obj->{'flags'})
         ,Grant::fromInherited($obj->{'inherited'})
@@ -4100,6 +4271,9 @@ class License {
      * @throws Exception
      */
     public static function from(stdClass $obj): License {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new License(
          License::fromName($obj->{'name'})
         );
@@ -4421,6 +4595,21 @@ class Metadata {
      * @throws Exception
      */
     public static function from(stdClass $obj): Metadata {
+        if (!property_exists($obj, 'availableDisplayTypes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rdfClass')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rdfSubject')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'renderTypeConfig')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowIdentifier')) {
+            throw new Exception("Missing required property");
+        }
         return new Metadata(
          Metadata::fromAvailableDisplayTypes($obj->{'availableDisplayTypes'})
         ,Metadata::fromRDFClass($obj->{'rdfClass'})
@@ -4528,6 +4717,9 @@ class RenderTypeConfig {
      * @throws Exception
      */
     public static function from(stdClass $obj): RenderTypeConfig {
+        if (!property_exists($obj, 'visible')) {
+            throw new Exception("Missing required property");
+        }
         return new RenderTypeConfig(
          RenderTypeConfig::fromVisible($obj->{'visible'})
         );
@@ -4626,6 +4818,9 @@ class Visible {
      * @throws Exception
      */
     public static function from(stdClass $obj): Visible {
+        if (!property_exists($obj, 'table')) {
+            throw new Exception("Missing required property");
+        }
         return new Visible(
          Visible::fromTable($obj->{'table'})
         );
@@ -4828,6 +5023,15 @@ class Owner {
      * @throws Exception
      */
     public static function from(stdClass $obj): Owner {
+        if (!property_exists($obj, 'displayName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'screenName')) {
+            throw new Exception("Missing required property");
+        }
         return new Owner(
          Owner::fromDisplayName($obj->{'displayName'})
         ,Owner::fromID($obj->{'id'})
diff --git a/base/php/test/inputs/json/misc/f82d9.json/default/TopLevel.php b/head/php/test/inputs/json/misc/f82d9.json/default/TopLevel.php
index 4e723c2..d65a866 100644
--- a/base/php/test/inputs/json/misc/f82d9.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/f82d9.json/default/TopLevel.php
@@ -479,6 +479,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'basePath')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'definitions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'host')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'info')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'paths')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'produces')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'schemes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'swagger')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBasePath($obj->{'basePath'})
         ,TopLevel::fromDefinitions($obj->{'definitions'})
@@ -592,6 +616,9 @@ class Definitions {
      * @throws Exception
      */
     public static function from(stdClass $obj): Definitions {
+        if (!property_exists($obj, 'Report')) {
+            throw new Exception("Missing required property");
+        }
         return new Definitions(
          Definitions::fromReport($obj->{'Report'})
         );
@@ -691,6 +718,9 @@ class Report {
      * @throws Exception
      */
     public static function from(stdClass $obj): Report {
+        if (!property_exists($obj, 'properties')) {
+            throw new Exception("Missing required property");
+        }
         return new Report(
          Report::fromProperties($obj->{'properties'})
         );
@@ -1267,6 +1297,36 @@ class Properties {
      * @throws Exception
      */
     public static function from(stdClass $obj): Properties {
+        if (!property_exists($obj, 'click_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'expiration_date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'industry')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'report_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source_industry')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Properties(
          Properties::fromClickURL($obj->{'click_url'})
         ,Properties::fromCountry($obj->{'country'})
@@ -1436,6 +1496,12 @@ class ClickURL {
      * @throws Exception
      */
     public static function from(stdClass $obj): ClickURL {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new ClickURL(
          ClickURL::fromDescription($obj->{'description'})
         ,ClickURL::fromType($obj->{'type'})
@@ -1685,6 +1751,15 @@ class Info {
      * @throws Exception
      */
     public static function from(stdClass $obj): Info {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'version')) {
+            throw new Exception("Missing required property");
+        }
         return new Info(
          Info::fromDescription($obj->{'description'})
         ,Info::fromTitle($obj->{'title'})
@@ -1788,6 +1863,9 @@ class Paths {
      * @throws Exception
      */
     public static function from(stdClass $obj): Paths {
+        if (!property_exists($obj, '/market_research_library/search')) {
+            throw new Exception("Missing required property");
+        }
         return new Paths(
          Paths::fromMarketResearchLibrarySearch($obj->{'/market_research_library/search'})
         );
@@ -1887,6 +1965,9 @@ class MarketResearchLibrarySearch {
      * @throws Exception
      */
     public static function from(stdClass $obj): MarketResearchLibrarySearch {
+        if (!property_exists($obj, 'get')) {
+            throw new Exception("Missing required property");
+        }
         return new MarketResearchLibrarySearch(
          MarketResearchLibrarySearch::fromGet($obj->{'get'})
         );
@@ -2220,6 +2301,21 @@ class Get {
      * @throws Exception
      */
     public static function from(stdClass $obj): Get {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'parameters')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'responses')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'summary')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tags')) {
+            throw new Exception("Missing required property");
+        }
         return new Get(
          Get::fromDescription($obj->{'description'})
         ,Get::fromParameters($obj->{'parameters'})
@@ -2588,6 +2684,24 @@ class Parameter {
      * @throws Exception
      */
     public static function from(stdClass $obj): Parameter {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'format')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'in')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'required')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Parameter(
          Parameter::fromDescription($obj->{'description'})
         ,Parameter::fromFormat($obj->{'format'})
@@ -2697,6 +2811,9 @@ class Responses {
      * @throws Exception
      */
     public static function from(stdClass $obj): Responses {
+        if (!property_exists($obj, '200')) {
+            throw new Exception("Missing required property");
+        }
         return new Responses(
          Responses::fromThe200($obj->{'200'})
         );
@@ -2848,6 +2965,12 @@ class The200 {
      * @throws Exception
      */
     public static function from(stdClass $obj): The200 {
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'schema')) {
+            throw new Exception("Missing required property");
+        }
         return new The200(
          The200::fromDescription($obj->{'description'})
         ,The200::fromSchema($obj->{'schema'})
@@ -3001,6 +3124,12 @@ class Schema {
      * @throws Exception
      */
     public static function from(stdClass $obj): Schema {
+        if (!property_exists($obj, 'items')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Schema(
          Schema::fromItems($obj->{'items'})
         ,Schema::fromType($obj->{'type'})
@@ -3101,6 +3230,9 @@ class Items {
      * @throws Exception
      */
     public static function from(stdClass $obj): Items {
+        if (!property_exists($obj, '$ref')) {
+            throw new Exception("Missing required property");
+        }
         return new Items(
          Items::fromRef($obj->{'$ref'})
         );
diff --git a/base/php/test/inputs/json/misc/f974d.json/default/TopLevel.php b/head/php/test/inputs/json/misc/f974d.json/default/TopLevel.php
index f63ed5a..7aae602 100644
--- a/base/php/test/inputs/json/misc/f974d.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/f974d.json/default/TopLevel.php
@@ -306,6 +306,21 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'block_index')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hash')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'time')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'txIndexes')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBlockIndex($obj->{'block_index'})
         ,TopLevel::fromHash($obj->{'hash'})
diff --git a/base/php/test/inputs/json/misc/faff5.json/default/TopLevel.php b/head/php/test/inputs/json/misc/faff5.json/default/TopLevel.php
index f638a0e..268f750 100644
--- a/base/php/test/inputs/json/misc/faff5.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/faff5.json/default/TopLevel.php
@@ -85,6 +85,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'response')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromResponse($obj->{'response'})
         );
@@ -235,6 +238,12 @@ class Response {
      * @throws Exception
      */
     public static function from(stdClass $obj): Response {
+        if (!property_exists($obj, 'player_count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'result')) {
+            throw new Exception("Missing required property");
+        }
         return new Response(
          Response::fromPlayerCount($obj->{'player_count'})
         ,Response::fromResult($obj->{'result'})
diff --git a/base/php/test/inputs/json/misc/fcca3.json/default/TopLevel.php b/head/php/test/inputs/json/misc/fcca3.json/default/TopLevel.php
index 97efbf6..fdf2bfe 100644
--- a/base/php/test/inputs/json/misc/fcca3.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/fcca3.json/default/TopLevel.php
@@ -190,6 +190,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromMeta($obj->{'meta'})
@@ -291,6 +297,9 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'view')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromView($obj->{'view'})
         );
@@ -2331,6 +2340,117 @@ class View {
      * @throws Exception
      */
     public static function from(stdClass $obj): View {
+        if (!property_exists($obj, 'attribution')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'averageRating')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'category')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'columns')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'createdAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'displayType')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downloadCount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'grants')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hideFromCatalog')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hideFromDataJson')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'indexUpdatedAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locale')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'metadata')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'newBackend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'numberOfComments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'oid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'owner')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'provenance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationAppendEnabled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationGroup')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'publicationStage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'query')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rights')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowsUpdatedAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowsUpdatedBy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tableAuthor')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tableId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'totalTimesRated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewCount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewLastModified')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'viewType')) {
+            throw new Exception("Missing required property");
+        }
         return new View(
          View::fromAttribution($obj->{'attribution'})
         ,View::fromAverageRating($obj->{'averageRating'})
@@ -3141,6 +3261,27 @@ class Column {
      * @throws Exception
      */
     public static function from(stdClass $obj): Column {
+        if (!property_exists($obj, 'dataTypeName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fieldName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'format')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'position')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'renderTypeName')) {
+            throw new Exception("Missing required property");
+        }
         return new Column(
          Column::fromCachedContents($obj->{'cachedContents'})
         ,Column::fromDataTypeName($obj->{'dataTypeName'})
@@ -3605,6 +3746,21 @@ class CachedContents {
      * @throws Exception
      */
     public static function from(stdClass $obj): CachedContents {
+        if (!property_exists($obj, 'largest')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'non_null')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'null')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'smallest')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'top')) {
+            throw new Exception("Missing required property");
+        }
         return new CachedContents(
          CachedContents::fromAverage($obj->{'average'})
         ,CachedContents::fromLargest($obj->{'largest'})
@@ -3767,6 +3923,12 @@ class Top {
      * @throws Exception
      */
     public static function from(stdClass $obj): Top {
+        if (!property_exists($obj, 'count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
         return new Top(
          Top::fromCount($obj->{'count'})
         ,Top::fromItem($obj->{'item'})
@@ -4274,6 +4436,15 @@ class Grant {
      * @throws Exception
      */
     public static function from(stdClass $obj): Grant {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'inherited')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Grant(
          Grant::fromFlags($obj->{'flags'})
         ,Grant::fromInherited($obj->{'inherited'})
@@ -4770,6 +4941,30 @@ class ViewMetadata {
      * @throws Exception
      */
     public static function from(stdClass $obj): ViewMetadata {
+        if (!property_exists($obj, 'attachments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'availableDisplayTypes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'custom_fields')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'filterCondition')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'jsonQuery')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rdfSubject')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'renderTypeConfig')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rowLabel')) {
+            throw new Exception("Missing required property");
+        }
         return new ViewMetadata(
          ViewMetadata::fromAttachments($obj->{'attachments'})
         ,ViewMetadata::fromAvailableDisplayTypes($obj->{'availableDisplayTypes'})
@@ -5038,6 +5233,18 @@ class Attachment {
      * @throws Exception
      */
     public static function from(stdClass $obj): Attachment {
+        if (!property_exists($obj, 'assetId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'blobId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'filename')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new Attachment(
          Attachment::fromAssetID($obj->{'assetId'})
         ,Attachment::fromBlobID($obj->{'blobId'})
@@ -5302,6 +5509,18 @@ class CustomFields {
      * @throws Exception
      */
     public static function from(stdClass $obj): CustomFields {
+        if (!property_exists($obj, 'Common Core')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Dataset Information')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Dataset Summary')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Disclaimers')) {
+            throw new Exception("Missing required property");
+        }
         return new CustomFields(
          CustomFields::fromCommonCore($obj->{'Common Core'})
         ,CustomFields::fromDatasetInformation($obj->{'Dataset Information'})
@@ -5510,6 +5729,15 @@ class CommonCore {
      * @throws Exception
      */
     public static function from(stdClass $obj): CommonCore {
+        if (!property_exists($obj, 'Contact Email')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Contact Name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Publisher')) {
+            throw new Exception("Missing required property");
+        }
         return new CommonCore(
          CommonCore::fromContactEmail($obj->{'Contact Email'})
         ,CommonCore::fromContactName($obj->{'Contact Name'})
@@ -5612,6 +5840,9 @@ class DatasetInformation {
      * @throws Exception
      */
     public static function from(stdClass $obj): DatasetInformation {
+        if (!property_exists($obj, 'Agency')) {
+            throw new Exception("Missing required property");
+        }
         return new DatasetInformation(
          DatasetInformation::fromAgency($obj->{'Agency'})
         );
@@ -5970,6 +6201,24 @@ class DatasetSummary {
      * @throws Exception
      */
     public static function from(stdClass $obj): DatasetSummary {
+        if (!property_exists($obj, 'Contact Information')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Coverage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Granularity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Organization')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Posting Frequency')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Time Period')) {
+            throw new Exception("Missing required property");
+        }
         return new DatasetSummary(
          DatasetSummary::fromContactInformation($obj->{'Contact Information'})
         ,DatasetSummary::fromCoverage($obj->{'Coverage'})
@@ -6130,6 +6379,12 @@ class Disclaimers {
      * @throws Exception
      */
     public static function from(stdClass $obj): Disclaimers {
+        if (!property_exists($obj, 'Disclaimer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Limitations')) {
+            throw new Exception("Missing required property");
+        }
         return new Disclaimers(
          Disclaimers::fromDisclaimer($obj->{'Disclaimer'})
         ,Disclaimers::fromLimitations($obj->{'Limitations'})
@@ -6399,6 +6654,18 @@ class FilterCondition {
      * @throws Exception
      */
     public static function from(stdClass $obj): FilterCondition {
+        if (!property_exists($obj, 'children')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'metadata')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'value')) {
+            throw new Exception("Missing required property");
+        }
         return new FilterCondition(
          FilterCondition::fromChildren($obj->{'children'})
         ,FilterCondition::fromMetadata($obj->{'metadata'})
@@ -6608,6 +6875,15 @@ class Child {
      * @throws Exception
      */
     public static function from(stdClass $obj): Child {
+        if (!property_exists($obj, 'metadata')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'value')) {
+            throw new Exception("Missing required property");
+        }
         return new Child(
          Child::fromMetadata($obj->{'metadata'})
         ,Child::fromType($obj->{'type'})
@@ -6840,6 +7116,15 @@ class ChildMetadata {
      * @throws Exception
      */
     public static function from(stdClass $obj): ChildMetadata {
+        if (!property_exists($obj, 'customValues')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'operator')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tableColumnId')) {
+            throw new Exception("Missing required property");
+        }
         return new ChildMetadata(
          ChildMetadata::fromCustomValues($obj->{'customValues'})
         ,ChildMetadata::fromOperator($obj->{'operator'})
@@ -6942,6 +7227,9 @@ class TableColumnID {
      * @throws Exception
      */
     public static function from(stdClass $obj): TableColumnID {
+        if (!property_exists($obj, '703610')) {
+            throw new Exception("Missing required property");
+        }
         return new TableColumnID(
          TableColumnID::fromThe703610($obj->{'703610'})
         );
@@ -7092,6 +7380,12 @@ class FilterConditionMetadata {
      * @throws Exception
      */
     public static function from(stdClass $obj): FilterConditionMetadata {
+        if (!property_exists($obj, 'advanced')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unifiedVersion')) {
+            throw new Exception("Missing required property");
+        }
         return new FilterConditionMetadata(
          FilterConditionMetadata::fromAdvanced($obj->{'advanced'})
         ,FilterConditionMetadata::fromUnifiedVersion($obj->{'unifiedVersion'})
@@ -7204,6 +7498,9 @@ class JSONQuery {
      * @throws Exception
      */
     public static function from(stdClass $obj): JSONQuery {
+        if (!property_exists($obj, 'order')) {
+            throw new Exception("Missing required property");
+        }
         return new JSONQuery(
          JSONQuery::fromOrder($obj->{'order'})
         );
@@ -7354,6 +7651,12 @@ class Order {
      * @throws Exception
      */
     public static function from(stdClass $obj): Order {
+        if (!property_exists($obj, 'ascending')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'columnFieldName')) {
+            throw new Exception("Missing required property");
+        }
         return new Order(
          Order::fromAscending($obj->{'ascending'})
         ,Order::fromColumnFieldName($obj->{'columnFieldName'})
@@ -7455,6 +7758,9 @@ class RenderTypeConfig {
      * @throws Exception
      */
     public static function from(stdClass $obj): RenderTypeConfig {
+        if (!property_exists($obj, 'visible')) {
+            throw new Exception("Missing required property");
+        }
         return new RenderTypeConfig(
          RenderTypeConfig::fromVisible($obj->{'visible'})
         );
@@ -7553,6 +7859,9 @@ class Visible {
      * @throws Exception
      */
     public static function from(stdClass $obj): Visible {
+        if (!property_exists($obj, 'table')) {
+            throw new Exception("Missing required property");
+        }
         return new Visible(
          Visible::fromTable($obj->{'table'})
         );
@@ -8029,6 +8338,30 @@ class Owner {
      * @throws Exception
      */
     public static function from(stdClass $obj): Owner {
+        if (!property_exists($obj, 'displayName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profileImageUrlLarge')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profileImageUrlMedium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'profileImageUrlSmall')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rights')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'roleName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'screenName')) {
+            throw new Exception("Missing required property");
+        }
         return new Owner(
          Owner::fromDisplayName($obj->{'displayName'})
         ,Owner::fromID($obj->{'id'})
@@ -8153,6 +8486,9 @@ class Query {
      * @throws Exception
      */
     public static function from(stdClass $obj): Query {
+        if (!property_exists($obj, 'orderBys')) {
+            throw new Exception("Missing required property");
+        }
         return new Query(
          Query::fromOrderBys($obj->{'orderBys'})
         );
@@ -8304,6 +8640,12 @@ class OrderBy {
      * @throws Exception
      */
     public static function from(stdClass $obj): OrderBy {
+        if (!property_exists($obj, 'ascending')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'expression')) {
+            throw new Exception("Missing required property");
+        }
         return new OrderBy(
          OrderBy::fromAscending($obj->{'ascending'})
         ,OrderBy::fromExpression($obj->{'expression'})
@@ -8456,6 +8798,12 @@ class Expression {
      * @throws Exception
      */
     public static function from(stdClass $obj): Expression {
+        if (!property_exists($obj, 'columnId')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Expression(
          Expression::fromColumnID($obj->{'columnId'})
         ,Expression::fromType($obj->{'type'})
diff --git a/base/php/test/inputs/json/misc/fd329.json/default/TopLevel.php b/head/php/test/inputs/json/misc/fd329.json/default/TopLevel.php
index bf3c1bc..5e950d6 100644
--- a/base/php/test/inputs/json/misc/fd329.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/misc/fd329.json/default/TopLevel.php
@@ -152,6 +152,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromDescription($obj->{'description'})
@@ -304,6 +310,12 @@ class Datum {
      * @throws Exception
      */
     public static function from(stdClass $obj): Datum {
+        if (!property_exists($obj, 'anomaly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'value')) {
+            throw new Exception("Missing required property");
+        }
         return new Datum(
          Datum::fromAnomaly($obj->{'anomaly'})
         ,Datum::fromValue($obj->{'value'})
@@ -560,6 +572,18 @@ class Description {
      * @throws Exception
      */
     public static function from(stdClass $obj): Description {
+        if (!property_exists($obj, 'base_period')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'missing')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'units')) {
+            throw new Exception("Missing required property");
+        }
         return new Description(
          Description::fromBasePeriod($obj->{'base_period'})
         ,Description::fromMissing($obj->{'missing'})
diff --git a/base/php/test/inputs/json/priority/blns-object.json/default/TopLevel.php b/head/php/test/inputs/json/priority/blns-object.json/default/TopLevel.php
index 78d287e..6539245 100644
--- a/base/php/test/inputs/json/priority/blns-object.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/blns-object.json/default/TopLevel.php
@@ -191,6 +191,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'a')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'b')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'c')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromA($obj->{'a'})
         ,TopLevel::fromB($obj->{'b'})
@@ -12201,6 +12210,696 @@ class A {
      * @throws Exception
      */
     public static function from(stdClass $obj): A {
+        if (!property_exists($obj, 'ثم نفس سقطت وبالتحديد،, جزيرتي باستخدام أن دنو. إذ هنا؟ الستار وتنصيب كان. أهّل ايطاليا، بريطانيا-فرنسا قد أخذ. سليمان، إتفاقية بين ما, يذكر الحدود أي بعد, معاملة بولندا، الإطلاق عل إيو.')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '٠١٢٣٤٥٦٧٨٩')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็ ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็ ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'パーティーへ行かないか')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '和製漢語')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '田中さんにあげて下さい')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '｀ｨ(´∀｀∩')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '!@#$%^&*()`~')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '-0')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '00˙Ɩ$-')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '0,00')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '0.0/0.0')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1\'000\'000.00')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1E02')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '\';alert(123);t=\'')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'false')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href=java&#1&#2&#3&#4&#5&#6&#7&#8&#11&#12script:javascript:alert(1)>XXX</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="javascript\\x09:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="javascript\\x0A:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="javascript\\x3A:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x01javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x05javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x08javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x09javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x0Cjavascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x10javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x11javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x13javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x17javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x1Fjavascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\xC2\\xA0javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\xE1\\x9A\\x80javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\xE1\\xA0\\x8Ejavascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\xE2\\x80\\x83javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\xE2\\x80\\x84javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\xE2\\x80\\x86javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\xE2\\x80\\x87javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\xE2\\x80\\xA8javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '‪‪test‪')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'True')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:exp\\x00ression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:exp\\x5Cression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\x09expression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\x0Bexpression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\x20expression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x\\x3Aexpression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\xC2\\xA0expression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\xE2\\x80\\x80expression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\xE2\\x80\\x84expression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\xE2\\x80\\x89expression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\xE2\\x80\\x8Bexpression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, ';alert(123);')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '";alert(123);t="')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '\\";alert(\'XSS\');//')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '-.')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# and U+200B (ZERO WIDTH SPACE), which are in the C categories but are often')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Arsenal canal')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '" autofocus onkeyup="javascript:alert(123)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'AUX')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '¡™£¢∞§¶•ªº–≠')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Changing length when lowercased')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Characters which increase in length (2 to 3 bytes) when lowercased')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'classic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Command Injection (Ruby)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<>?:"{}|_+')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '%d')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Dick Van Dyke')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'dontMakeAMap')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Dr. Herman I. Libshitz')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, ' ')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '$ENV{\'HOME\'}')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '../../../../../../../../../../../etc/hosts')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '../../../../../../../../../../../etc/passwd%00')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'False')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '\'"\'')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '{0}')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '⁦test⁧')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#       fonts, and have a number of special behaviors')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<foo val=`bar\' />')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '`⁄€‹›ﬁﬂ‡°·‚—±')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '-,')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '$HOME')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Human injection')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '̡͓̞ͅI̗̘̦͝n͇͇͙v̮̫ok̲̫̙͈i̖͙̭̹̠̞n̡̻̮̣̺g̲͈͙̭͙̬͎ ̰t͔̦h̞̲e̢̤ ͍̬̲͖f̴̘͕̣è͖ẹ̥̩l͖͔͚i͓͚̦͠n͖͍̗͓̳̮g͍ ̨o͚̪͡f̘̣̬ ̖̘͖̟͙̮c҉͔̫͖͓͇͖ͅh̵̤̣͚͔á̗̼͕ͅo̼̣̥s̱͈̺̖̦̻͢.̛̖̞̠̫̰')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<!--[if<img src=x onerror=javascript:alert(1)//]> -->')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<!--[if]><script>javascript:alert(1)</script -->')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<IMG SRC="jav   ascript:alert(\'XSS\');">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<IMG SRC="jav&#x0A;ascript:alert(\'XSS\');">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<IMG SRC="jav&#x0D;ascript:alert(\'XSS\');">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<IMG SRC=&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#88;&#83;&#83;&#39;&#41;>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src\\x09=x onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src\\x11=x onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src=x onerror=\\x00"javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src=x onerror=\\x09"javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src=x\\x09onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src=x\\x10onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src=x\\x11onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src=x\\x12onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src=x\\x13onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '`"\'><img src=xxx:x \\x00onerror=javascript:alert(1)>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '`"\'><img src=xxx:x \\x0Bonerror=javascript:alert(1)>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '`"\'><img src=xxx:x \\x2Fonerror=javascript:alert(1)>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img \\x00src=x onerror="alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img\\x10src=x onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img\\x13src=x onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img\\x32src=x onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img \\x39src=x onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, ',./;\'[]\\-=')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, ',')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'INF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '-Infinity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Innocuous strings which may be blocked by profanity filters (https://en.wikipedia.org/wiki/Scunthorpe_problem)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Jimmy Clitheroe')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Kernel.exit(1)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Known CVEs and Vulnerabilities')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Lightwater Country Park')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'LPT2')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'LPT3')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '`ls -al /`')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '\\')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	MSDOS/Windows Special Filenames')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nil')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# Non-whitespace C1 controls: U+0080 through U+0084 and U+0086 through U+009F.')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'None')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '(null)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, ' onfocus=JaVaSCript:alert(123) autofocus')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '\' OR \'1\'=\'1')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Penistone Community Church')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'perl -e \'print "<IMG SRC=java\\0script:alert(\\"XSS\\")>";\' > out')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'PRN')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '\'')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '0')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '‫test‫')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'RomansInSussex.co.uk')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '%s')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<<< %s(un=\'%s\') = %u')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<sc<script>ript>alert(123)</sc</script>ript>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"><script>alert(123);</script x="')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Script Injection')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<SCRIPT SRC=http://ha.ckers.org/xss.js?< B >')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<SCRIPT/SRC="http://ha.ckers.org/xss.js"></SCRIPT>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '</script><script>alert(123)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\x00javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<script\\x09type="text/javascript">javascript:alert(1);</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\x0Cjavascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\x0Djavascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<script\\x20type="text/javascript">javascript:alert(1);</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<script\\x3Etype="text/javascript">javascript:alert(1);</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xC2\\x85javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xC2\\xA0javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xE1\\x9A\\x80javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xE1\\xA0\\x8Ejavascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xE2\\x80\\x81javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xE2\\x80\\x86javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xE2\\x80\\x89javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xE2\\x81\\x9Fjavascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xEF\\xBB\\xBFjavascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xF0\\x90\\x96\\x9Ajavascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<SCRIPT/XSS SRC="http://ha.ckers.org/xss.js"></SCRIPT>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	SQL Injection')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '(╯°□°）╯︵ ┻━┻)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	String which can reveal system files when parsed by a badly configured XML parser')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings that test for known vulnerabilities')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which can be accidentally expanded into different strings if evaluated in the wrong context, e.g. used as a printf format string or via Perl or shell eval. Might expose sensitive data from the program doing the interpolation, or might just represent the wrong string.')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which can call system commands within Ruby/Rails applications')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which consists of Japanese-style emoticons which are popular on the web')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which contain bold/italic/etc. versions of normal characters')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which contain common unicode symbols (e.g. smart quotes)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which contain Emoji; should be the same behavior as two-byte characters, but not always')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which contain misplaced quotation marks; can cause encoding errors')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which contain unicode subscripts/superscripts; can cause rendering issues')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which crashed iMessage in various versions of iOS')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which may cause human to reinterpret worldview')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Super Bowl XXX')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '( ͡° ͜ʖ ͡°)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'הָיְתָהtestالصفحات التّحول')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '</textarea><script>alert(123)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '+0')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '0..0')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '0,0,0')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '0,0/0,0')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '0x0')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '-1')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1/0')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1.00')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1.0/0.0')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1\'000,00')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1 000 000.00')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '𝑻𝒉𝒆 𝒒𝒖𝒊𝒄𝒌 𝒃𝒓𝒐𝒘𝒏 𝒇𝒐𝒙 𝒋𝒖𝒎𝒑𝒔 𝒐𝒗𝒆𝒓 𝒕𝒉𝒆 𝒍𝒂𝒛𝒚 𝒅𝒐𝒈')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1/2')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '123456789012345678901234567890123456789')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '𝓣𝓱𝓮 𝓺𝓾𝓲𝓬𝓴 𝓫𝓻𝓸𝔀𝓷 𝓯𝓸𝔁 𝓳𝓾𝓶𝓹𝓼 𝓸𝓿𝓮𝓻 𝓽𝓱𝓮 𝓵𝓪𝔃𝔂 𝓭𝓸𝓰')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '𝕿𝖍𝖊 𝖖𝖚𝖎𝖈𝖐 𝖇𝖗𝖔𝖜𝖓 𝖋𝖔𝖝 𝖏𝖚𝖒𝖕𝖘 𝖔𝖛𝖊𝖗 𝖙𝖍𝖊 𝖑𝖆𝖟𝖞 𝖉𝖔𝖌')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '🇺🇸🇷🇺🇸 🇦🇫🇦🇲🇸')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '🇺🇸🇷🇺🇸🇦')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '🇺🇸🇷🇺🇸🇦🇫🇦🇲')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '👩🏽')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '🚾 🆒 🆓 🆕 🆖 🆗 🆙 🏧')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1;DROP TABLE users')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '-1E02')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1E2')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1#QNAN')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1#SNAN')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '­؀؁؂؃؄؅؜۝܏᠎​‌‍‎‏‪‫‬‭‮⁠⁡⁢⁣⁤⁦⁧⁨⁩⁪⁫⁬⁭⁮⁯﻿￹￺￻𑂽𛲠𛲡𛲢𛲣𝅳𝅴𝅵𝅶𝅷𝅸𝅹𝅺󠀁󠀠󠀡󠀢󠀣󠀤󠀥󠀦󠀧󠀨󠀩󠀪󠀫󠀬󠀭󠀮󠀯󠀰󠀱󠀲󠀳󠀴󠀵󠀶󠀷󠀸󠀹󠀺󠀻󠀼󠀽󠀾󠀿󠁀󠁁󠁂󠁃󠁄󠁅󠁆󠁇󠁈󠁉󠁊󠁋󠁌󠁍󠁎󠁏󠁐󠁑󠁒󠁓󠁔󠁕󠁖󠁗󠁘󠁙󠁚󠁛󠁜󠁝󠁞󠁟󠁠󠁡󠁢󠁣󠁤󠁥󠁦󠁧󠁨󠁩󠁪󠁫󠁬󠁭󠁮󠁯󠁰󠁱󠁲󠁳󠁴󠁵󠁶󠁷󠁸󠁹󠁺󠁻󠁼󠁽󠁾󠁿')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '﷽')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '﻿')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ﾟ･✿ヾ╲(｡◕‿◕｡)╱✿･ﾟ')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '￾')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '¸˛Ç◊ı˜Â¯˘¿')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Œ„´‰ˇÁ¨ˆØ∏”’')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'œ∑´®†¥¨ˆøπ“‘')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Ⱥ')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Ⱦ')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '₀₁₂')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '⒯⒣⒠ ⒬⒰⒤⒞⒦ ⒝⒭⒪⒲⒩ ⒡⒪⒳ ⒥⒰⒨⒫⒮ ⒪⒱⒠⒭ ⒯⒣⒠ ⒧⒜⒵⒴ ⒟⒪⒢')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# The next two lines may appear to be blank or mojibake in some viewers.')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'The quick brown fox... [Beeeep]')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'TRUE')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Two-Byte Characters')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# U+0000, U+000A, or U+000D (NUL, LF, CR).')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<u oncopy=alert()> Copy me</u>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'undef')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Unicode font')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Unicode Numbers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Unwanted Interpolation')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '%x(\'ls -al /\')')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Z̮̞̠͙͔ͅḀ̗̞͈̻̗Ḷ͙͎̯̹̞͓G̻O̭̗̮')) {
+            throw new Exception("Missing required property");
+        }
         return new A(
          A::from1($obj->{'ثم نفس سقطت وبالتحديد،, جزيرتي باستخدام أن دنو. إذ هنا؟ الستار وتنصيب كان. أهّل ايطاليا، بريطانيا-فرنسا قد أخذ. سليمان، إتفاقية بين ما, يذكر الحدود أي بعد, معاملة بولندا، الإطلاق عل إيو.'})
         ,A::from2($obj->{'٠١٢٣٤٥٦٧٨٩'})
@@ -20973,29 +21672,506 @@ class B {
      * @throws Exception
      */
     public static function from(stdClass $obj): B {
-        return new B(
-         B::from1($obj->{'ﷺ'})
-        ,B::from2($obj->{'１２３'})
-        ,B::fromAHrefHTTPFooBarXYAImgAltImgSrcXXOnerrorJavascriptAlert1A($obj->{'<a href=http://foo.bar/#x=`y></a><img alt="`><img src=x:x onerror=javascript:alert(1)></a>">'})
-        ,B::fromAHrefJavascriptX00JavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="javascript\\x00:javascript:alert(1)" id="fuzzelement1">test</a>'})
-        ,B::fromAHrefJavascriptX0DJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="javascript\\x0D:javascript:alert(1)" id="fuzzelement1">test</a>'})
-        ,B::fromAHrefX02JavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x02javascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
-        ,B::fromAHrefX04JavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x04javascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
-        ,B::fromAHrefX0AjavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x0Ajavascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
-        ,B::fromAHrefX0DjavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x0Djavascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
-        ,B::fromAHrefX0EjavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x0Ejavascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
-        ,B::fromAHrefX0FjavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x0Fjavascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
-        ,B::fromAHrefX16JavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x16javascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
-        ,B::fromAHrefX19JavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x19javascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
-        ,B::fromAHrefX1AjavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x1Ajavascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
-        ,B::fromAHrefX1DjavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x1Djavascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
-        ,B::fromAHrefX1EjavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x1Ejavascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
-        ,B::fromAHrefXE2X80X81JavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\xE2\\x80\\x81javascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
-        ,B::fromAHrefXE2X80X82JavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\xE2\\x80\\x82javascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
-        ,B::fromAHrefXE2X80XA9JavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\xE2\\x80\\xA9javascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
-        ,B::fromAHrefXE2X80XAFjavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\xE2\\x80\\xAFjavascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
-        ,B::fromAbcDivStyleXExpressionX5CJavascriptAlert1DEF($obj->{'ABC<div style="x:expression\\x5C(javascript:alert(1)">DEF'})
-        ,B::fromAbcDivStyleXX0AexpressionJavascriptAlert1DEF($obj->{'ABC<div style="x:\\x0Aexpression(javascript:alert(1)">DEF'})
+        if (!property_exists($obj, 'ﷺ')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '１２３')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href=http://foo.bar/#x=`y></a><img alt="`><img src=x:x onerror=javascript:alert(1)></a>">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="javascript\\x00:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="javascript\\x0D:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x02javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x04javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x0Ajavascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x0Djavascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x0Ejavascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x0Fjavascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x16javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x19javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x1Ajavascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x1Djavascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x1Ejavascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\xE2\\x80\\x81javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\xE2\\x80\\x82javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\xE2\\x80\\xA9javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\xE2\\x80\\xAFjavascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:expression\\x5C(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\x0Aexpression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\x0Dexpression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\xE2\\x80\\x82expression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\xE2\\x80\\x83expression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\xE2\\x80\\x85expression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\xE2\\x80\\x87expression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\xE2\\x80\\x8Aexpression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ヽ༼ຈل͜ຈ༽ﾉ ヽ༼ຈل͜ຈ༽ﾉ')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# appear in input.')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '+++ATH0')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '\' autofocus onkeyup=\'javascript:alert(123)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '	              ​    　')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1\'000.00')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<IMG SRC=# onmouseover="alert(\'xxs\')">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '--><script>alert(123)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '`touch /tmp/blns.fail`')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '__ﾛ(,_,*)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'basement')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '𝕋𝕙𝕖 𝕢𝕦𝕚𝕔𝕜 𝕓𝕣𝕠𝕨𝕟 𝕗𝕠𝕩 𝕛𝕦𝕞𝕡𝕤 𝕠𝕧𝕖𝕣 𝕥𝕙𝕖 𝕝𝕒𝕫𝕪 𝕕𝕠𝕘')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'But now...[20Cfor my greatest trick...[8m')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# "Byte order marks", U+FEFF and U+FFFE, each on its own line.')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'COM1')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'COM3')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# Commonly misinterpreted as additional graphic characters.')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'CON')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# contexts.  Divided into three groups based on (US-layout) keyboard position.')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Credit: https://twitter.com/jifa/status/625776454479970304')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '社會科學院語學研究所')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '/dev/null; touch /tmp/blns.fail ; echo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'dontMakeAMap')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'eval("puts \'hello world\'")')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'expression')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'FALSE')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'File:///')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	File Inclusion')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<foo val=”bar“ />')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '사회과학원 어학연구소')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# general category Cf (in Unicode 8.0.0).')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '̦H̬̤̗̤͝e͜ ̜̥̝̻͍̟́w̕h̖̯͓o̝͙̖͎̱̮ ҉̺̙̞̟͈W̷̼̭a̺̪͍į͈͕̭͙̯̜t̶̼̮s̘͙͖̕ ̠̫̠B̻͍͙͉̳ͅe̵h̵̬͇̫͙i̹͓̳̳̮͎̫̕n͟d̴̪̜̖ ̰͉̩͇͙̲͞ͅT͖̼͓̪͢h͏͓̮̻e̬̝̟ͅ ̤̹̝W͙̞̝͔͇͝ͅa͏͓͔̹̼̣l̴͔̰̤̟͔ḽ̫.͕')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '--help')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '❤️ 💔 💌 💕 💞 💓 💗 💖 💘 💝 💟 💜 💛 💚 💙')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'http://a/%%30%30')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	iOS Vulnerabilities')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'If you\'re reading this, you\'ve been in a coma for almost 20 years now. We\'re trying a new technique. We don\'t know where this message will end up in your dream, but we hope it works. Please wake up, we miss you.')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<iframe src=http://ha.ckers.org/scriptlet.html <')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<IMG SRC=" &#14;  javascript:alert(\'XSS\');">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<IMG SRC="jav&#x09;ascript:alert(\'XSS\');">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<IMG SRC= onmouseover="alert(\'xxs\')">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<IMG SRC=&#x6A&#x61&#x76&#x61&#x73&#x63&#x72&#x69&#x70&#x74&#x3A&#x61&#x6C&#x65&#x72&#x74&#x28&#x27&#x58&#x53&#x53&#x27&#x29>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src\\x00=x onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src=x onerror=\\x11"javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src=x onerror=\\x12"javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '`"\'><img src=xxx:x \\x0Aonerror=javascript:alert(1)>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '`"\'><img src=xxx:x \\x0Conerror=javascript:alert(1)>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '`"\'><img src=xxx:x \\x0Donerror=javascript:alert(1)>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img \\x00src=x onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img \\x11src=x onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img \\x12src=x onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img \\x47src=x onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '⁰⁴⁵₀₁₂')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Ω≈ç√∫˜µ≤≥÷')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#   IRC specific strings')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Japanese Emoticons')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Kernel.exec("ls -al /")')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Linda Callahan')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '部落格')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '찦차를 타고 온 펲시맨과 쑛다리 똠방각하')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '˙ɐnbᴉlɐ ɐuƃɐɯ ǝɹolop ʇǝ ǝɹoqɐl ʇn ʇunpᴉpᴉɔuᴉ ɹodɯǝʇ poɯsnᴉǝ op pǝs \'ʇᴉlǝ ƃuᴉɔsᴉdᴉpɐ ɹnʇǝʇɔǝsuoɔ \'ʇǝɯɐ ʇᴉs ɹolop ɯnsdᴉ ɯǝɹo˥')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'NIL')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'NUL')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'null')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Numeric Strings')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Ṱ̺̺̕o͞ ̷i̲̬͇̪͙n̝̗͕v̟̜̘̦͟o̶̙̰̠kè͚̮̺̪̹̱̤ ̖t̝͕̳̣̻̪͞h̼͓̲̦̳̘̲e͇̣̰̦̬͎ ̢̼̻̱̘h͚͎͙̜̣̲ͅi̦̲̣̰̤v̻͍e̺̭̳̪̰-m̢iͅn̖̺̞̲̯̰d̵̼̟͙̩̼̘̳ ̞̥̱̳̭r̛̗̘e͙p͠r̼̞̻̭̗e̺̠̣͟s̘͇̳͍̝͉e͉̥̯̞̲͚̬͜ǹ̬͎͎̟̖͇̤t͍̬̤͓̼̭͘ͅi̪̱n͠g̴͉ ͏͉ͅc̬̟h͡a̫̻̯͘o̫̟̖͍̙̝͉s̗̦̲.̨̹͈̣')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# Often forbidden to appear in various text-based file formats (e.g. XML),')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '" onfocus=JaVaSCript:alert(123) autofocus')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '\' OR 1=1 -- 1')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<script>alert(123)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Quotation Marks')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#       Regional Indicator Symbols')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#       Regional Indicator Symbols can be displayed differently across')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Reserved Strings')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"><script>alert(123)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '><script>alert(123);</script x=')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<<SCRIPT>alert("XSS");//<</SCRIPT>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<SCRIPT SRC=//ha.ckers.org/.j>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<script src="\\\\%(jscript)s"></script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\x09javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<script\\x0Atype="text/javascript">javascript:alert(1);</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<script\\x0Dtype="text/javascript">javascript:alert(1);</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\x21javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\x3Bjavascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xE2\\x80\\x85javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xE2\\x80\\x87javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xE2\\x80\\x8Ajavascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xE2\\x80\\xA8javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xE2\\x80\\xA9javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xE2\\x80\\xAFjavascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xE3\\x80\\x80javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Scunthorpe Problem')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'åß∂ƒ©˙∆˚¬…æ')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#   Strings that may occur on IRC clients that make security products freak out')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which are reserved characters in MSDOS/Windows')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which attempt to invoke a benign script injection; shows vulnerability to XSS')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which contain text that should be rendered RTL if possible (e.g. Arabic, Hebrew)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which contain two-byte characters: can cause rendering issues or character-length issues')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which contain unicode numbers; if the code is localized, it should see the input as numeric')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which may be used elsewhere in code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '(｡◕ ∀ ◕｡)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Terminal escape codes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '0.00')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '01000')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '08')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '09')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '0xffffffffffffffff')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '😍')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '$1.00')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1,0/0,0')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1 000.00')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1 000 000,00')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1\'; DROP TABLE users-- 1')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1#IND')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1#INF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '-2147483648/-1')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '2.2250738585072011e-308')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# The next line may appear to be blank, mojibake, or dingbats in some viewers.')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# The next line may appear to be blank or mojibake in some viewers.')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# The next line may be flagged for "trailing whitespace" in some viewers.')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# This file unfortunately cannot express strings containing')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '$(touch /tmp/blns.fail)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '() { _; } >_[$($())] { touch /tmp/blns.shellshock2.fail; }')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Tyson Gay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Unicode Symbols')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '\'`"><\\x00script>javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '\'`"><\\x3Cscript>javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        return new B(
+         B::from1($obj->{'ﷺ'})
+        ,B::from2($obj->{'１２３'})
+        ,B::fromAHrefHTTPFooBarXYAImgAltImgSrcXXOnerrorJavascriptAlert1A($obj->{'<a href=http://foo.bar/#x=`y></a><img alt="`><img src=x:x onerror=javascript:alert(1)></a>">'})
+        ,B::fromAHrefJavascriptX00JavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="javascript\\x00:javascript:alert(1)" id="fuzzelement1">test</a>'})
+        ,B::fromAHrefJavascriptX0DJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="javascript\\x0D:javascript:alert(1)" id="fuzzelement1">test</a>'})
+        ,B::fromAHrefX02JavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x02javascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
+        ,B::fromAHrefX04JavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x04javascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
+        ,B::fromAHrefX0AjavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x0Ajavascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
+        ,B::fromAHrefX0DjavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x0Djavascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
+        ,B::fromAHrefX0EjavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x0Ejavascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
+        ,B::fromAHrefX0FjavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x0Fjavascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
+        ,B::fromAHrefX16JavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x16javascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
+        ,B::fromAHrefX19JavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x19javascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
+        ,B::fromAHrefX1AjavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x1Ajavascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
+        ,B::fromAHrefX1DjavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x1Djavascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
+        ,B::fromAHrefX1EjavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\x1Ejavascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
+        ,B::fromAHrefXE2X80X81JavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\xE2\\x80\\x81javascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
+        ,B::fromAHrefXE2X80X82JavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\xE2\\x80\\x82javascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
+        ,B::fromAHrefXE2X80XA9JavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\xE2\\x80\\xA9javascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
+        ,B::fromAHrefXE2X80XAFjavascriptJavascriptAlert1IDFuzzelement1TestA($obj->{'<a href="\\xE2\\x80\\xAFjavascript:javascript:alert(1)" id="fuzzelement1">test</a>'})
+        ,B::fromAbcDivStyleXExpressionX5CJavascriptAlert1DEF($obj->{'ABC<div style="x:expression\\x5C(javascript:alert(1)">DEF'})
+        ,B::fromAbcDivStyleXX0AexpressionJavascriptAlert1DEF($obj->{'ABC<div style="x:\\x0Aexpression(javascript:alert(1)">DEF'})
         ,B::fromAbcDivStyleXX0DexpressionJavascriptAlert1DEF($obj->{'ABC<div style="x:\\x0Dexpression(javascript:alert(1)">DEF'})
         ,B::fromAbcDivStyleXXE2X80X82ExpressionJavascriptAlert1DEF($obj->{'ABC<div style="x:\\xE2\\x80\\x82expression(javascript:alert(1)">DEF'})
         ,B::fromAbcDivStyleXXE2X80X83ExpressionJavascriptAlert1DEF($obj->{'ABC<div style="x:\\xE2\\x80\\x83expression(javascript:alert(1)">DEF'})
@@ -31475,6 +32651,591 @@ class C {
      * @throws Exception
      */
     public static function from(stdClass $obj): C {
+        if (!property_exists($obj, 'مُنَاقَشَةُ سُبُلِ اِسْتِخْدَامِ اللُّغَةِ فِي النُّظُمِ الْقَائِمَةِ وَفِيم يَخُصَّ التَّطْبِيقَاتُ الْحاسُوبِيَّةُ، ')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '١٢٣')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '울란바토르')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '𠜎𠜱𠝹𠱓𠱸𠲖𠳏')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'A:')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x00javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x03javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x06javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x07javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x0Bjavascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x12javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x14javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x15javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x18javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x1Bjavascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x1Cjavascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\x20javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\xE2\\x80\\x80javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\xE2\\x80\\x85javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\xE2\\x80\\x88javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\xE2\\x80\\x89javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\xE2\\x80\\x8Ajavascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\xE2\\x81\\x9Fjavascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<a href="\\xE3\\x80\\x80javascript:javascript:alert(1)" id="fuzzelement1">test</a>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:expression\\x00(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\x00expression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\x0Cexpression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\xE2\\x80\\x81expression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\xE2\\x80\\x86expression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\xE2\\x80\\x88expression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\xE3\\x80\\x80expression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ABC<div style="x:\\xEF\\xBB\\xBFexpression(javascript:alert(1)">DEF')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '.')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# and U+007F (DEL)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# ASCII punctuation.  All of these characters may need to be escaped in some')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<BODY onload!#$%&()*~+-_.,:;?@[/|\\]^`=alert("XSS")>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'בְּרֵאשִׁית, בָּרָא אֱלֹהִים, אֵת הַשָּׁמַיִם, וְאֵת הָאָרֶץ')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"\'"\'"\'\'\'\'"')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '-0.0')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '0.0/0')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '-1.00')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1,000.00')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1,000,000.00')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1E+02')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '><script>alert(123)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '┬─┬ノ( º _ ºノ)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'CLOCK$')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'COM2')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'COM4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Craig Cockburn, Software Specialist')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '\\\\')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'DCC SEND STARTKEYLOGGER 0 0 0')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'dontMakeAMap')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Emoji')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '""')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'evaluate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '%')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '0/0')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<foo val=“bar” />')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ÅÍÎÏ˝ÓÔÒÚÆ☃')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '̗̺͖̹̯͓Ṯ̤͍̥͇͈h̲́e͏͓̼̗̙̼̣͔ ͇̜̱̠͓͍ͅN͕͠e̗̱z̘̝̜̺͙p̤̺̹͍̯͚e̠̻̠͜r̨̤͍̺̖͔̖̖d̠̟̭̬̝͟i̦͖̩͓͔̤a̠̗̬͉̙n͚͜ ̻̞̰͚ͅh̵͉i̳̞v̢͇ḙ͎͟-҉̭̩̼͔m̤̭̫i͕͇̝̦n̗͙ḍ̟ ̯̲͕͞ǫ̟̯̰̲͙̻̝f ̪̰̰̗̖̭̘͘c̦͍̲̞͍̩̙ḥ͚a̮͎̟̙͜ơ̩̹͎s̤.̝̝ ҉Z̡̖̜͖̰̣͉̜a͖̰͙̬͡l̲̫̳͍̩g̡̟̼̱͚̞̬ͅo̗͜.̟')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hasOwnProperty')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '--')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Horniman Museum')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'http://www.cum.qc.ca/')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<i onwheel=alert(1)> Scroll over me </i>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img[a][b][c]src[d]=x[e]onerror=[f]"alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<IMG onmouseover="alert(\'xxs\')">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<IMG """><SCRIPT>alert("XSS")</SCRIPT>">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<IMG SRC=javascript:alert(String.fromCharCode(88,83,83))>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<IMG SRC="javascript:alert(\'XSS\')"')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src onerror /" \'"= alt=javascript:alert(1)//">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src\\x10=x onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src\\x12=x onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src\\x13=x onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src\\x32=x onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src\\x47=x onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src=x onerror=alert(123) />')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src=x onerror=\\x10"javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src=x onerror=\\x32"javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img src="x` `<script>javascript:alert(1)</script>"` `>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '`"\'><img src=xxx:x \\x09onerror=javascript:alert(1)>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '`"\'><img src=xxx:x \\x20onerror=javascript:alert(1)>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '`"\'><img src=xxx:x \\x22onerror=javascript:alert(1)>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '`"\'><img src=xxx:x \\x27onerror=javascript:alert(1)>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img\\x11src=x onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img \\x34src=x onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<img\\x47src=x onerror="javascript:alert(1)">')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '-')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, ',。・:*:・゜’( ☻ ω ☻ )。・:*:・゜’')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Infinity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'JavaSCript:alert(123)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'LPT1')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '&lt;script&gt;alert(&#39;123&#39;);&lt;/script&gt;')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '_')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'magna cum laude')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'medieval erection of parapets')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mocha')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'NaN')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# Non-whitespace C0 controls: U+0001 through U+0008, U+000E through U+001F,')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'NULL')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '\' onfocus=JaVaSCript:alert(123) autofocus')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# or reused for internal delimiters on the theory that they should never')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<plaintext>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Powerلُلُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ冗')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"\'\'\'\'"\'"')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '0,,0')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1.000,00')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1.000.000,00')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '＜script＞alert(123)＜/script＞')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Right-To-Left Strings')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Roses are [0;31mred[0m, violets are [0;34mblue. Hope you enjoy terminal hue')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '%*.*s')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '\'><script>alert(123)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '\'><script>alert(123);</script x=\'')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>-javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '< / script >< script >alert(123)< / script >')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<script src="/\\%(jscript)s"></script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\x0Ajavascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\x0Bjavascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<script\\x0Ctype="text/javascript">javascript:alert(1);</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\x20javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\x2Bjavascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<script\\x2Ftype="text/javascript">javascript:alert(1);</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\x7Ejavascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xE2\\x80\\x80javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xE2\\x80\\x82javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xE2\\x80\\x83javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xE2\\x80\\x84javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xE2\\x80\\x88javascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xE2\\x80\\x8Bjavascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xEF\\xBF\\xAEjavascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"`\'><script>\\xEF\\xBF\\xBEjavascript:alert(1)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Scunthorpe General Hospital')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Server Code Injection')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'shitake mushrooms')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Special Characters')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'src=JaVaSCript:prompt(132)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '(ﾉಥ益ಥ）ﾉ﻿ ┻━┻')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which can be interpreted as numeric')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which can cause a SQL injection if inputs are not sanitized')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which can cause user to pull in files that should not be a part of a web server')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which can cause user to run code on server as a privileged user (c.f. https://news.ycombinator.com/item?id=7665153)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which contain "corrupted" text. The corruption will not appear in non-HTML text, however. (via http://www.eeemo.net)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which contain unicode with an "upsidedown" effect (via http://www.upsidedowntext.com)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which contain unicode with unusual properties (e.g. Right-to-left override) (c.f. http://www.unicode.org/charts/PDF/U2000.pdf)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Strings which punish the fools who use cat/type on this file')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<svg><script>123<1>alert(123)</script>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'System("ls -al /")')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '@{[system "touch /tmp/blns.fail"]}')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '\'\'')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, ' test ')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'test⁠test‫')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '🏳0🌈️')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '+0.0')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '0.0.0')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '() { 0; }; touch /tmp/blns.shellshock1.fail;')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '0xabad1dea')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '0xffffffff')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '--1')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Ｔｈｅ ｑｕｉｃｋ ｂｒｏｗｎ ｆｏｘ ｊｕｍｐｓ ｏｖｅｒ ｔｈｅ ｌａｚｙ ｄｏｇ')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '-$1.00')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1 000,00')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '1\'000\'000,00')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '-1/2')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '-1E+02')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '-1E2')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '-1#IND')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '⁰⁴⁵')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '⅛⅜⅝⅞')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '✋🏿 💪🏿 👐🏿 🙌🏿 👏🏿 🙏🏿')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '・(￣∀￣)・:*:')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '𝐓𝐡𝐞 𝐪𝐮𝐢𝐜𝐤 𝐛𝐫𝐨𝐰𝐧 𝐟𝐨𝐱 𝐣𝐮𝐦𝐩𝐬 𝐨𝐯𝐞𝐫 𝐭𝐡𝐞 𝐥𝐚𝐳𝐲 𝐝𝐨𝐠')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '𝚃𝚑𝚎 𝚚𝚞𝚒𝚌𝚔 𝚋𝚛𝚘𝚠𝚗 𝚏𝚘𝚡 𝚓𝚞𝚖𝚙𝚜 𝚘𝚟𝚎𝚛 𝚝𝚑𝚎 𝚕𝚊𝚣𝚢 𝚍𝚘𝚐')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '🐵 🙈 🙉 🙊')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '👾 🙇 💁 🙅 🙆 🙋 🙎 🙍')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '-9223372036854775808/-1')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<title onpropertychange=javascript:alert(1)></title><title title=>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# treated as whitespace in some contexts.')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Trick Unicode')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'true')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'undefined')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# Unicode additional control characters: all of the characters with')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Unicode Subscript/Superscript/Accents')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Unicode Upsidedown')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '$USER')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '--version')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# version 8.0.0), plus U+0009 (HT), U+000B (VT), U+000C (FF), U+0085 (NEL),')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '# Whitespace: all of the characters with category Zs, Zl, or Zp (in Unicode')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE foo [ <!ELEMENT foo ANY ><!ENTITY xxe SYSTEM "file:///etc/passwd" >]><foo>&xxe;</foo>')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#      XXE Injection (XML)')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '#	Zalgo Text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ZZ:')) {
+            throw new Exception("Missing required property");
+        }
         return new C(
          C::from1($obj->{'مُنَاقَشَةُ سُبُلِ اِسْتِخْدَامِ اللُّغَةِ فِي النُّظُمِ الْقَائِمَةِ وَفِيم يَخُصَّ التَّطْبِيقَاتُ الْحاسُوبِيَّةُ، '})
         ,C::from2($obj->{'١٢٣'})
diff --git a/base/php/test/inputs/json/priority/bug2037.json/default/TopLevel.php b/head/php/test/inputs/json/priority/bug2037.json/default/TopLevel.php
index 692ec42..629e095 100644
--- a/base/php/test/inputs/json/priority/bug2037.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/bug2037.json/default/TopLevel.php
@@ -99,6 +99,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'mission_specs')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromMissionSpecs($obj->{'mission_specs'})
         );
@@ -212,6 +215,9 @@ class MissionSpec {
      * @throws Exception
      */
     public static function from(stdClass $obj): MissionSpec {
+        if (!property_exists($obj, 'objectives')) {
+            throw new Exception("Missing required property");
+        }
         return new MissionSpec(
          MissionSpec::fromObjectives($obj->{'objectives'})
         );
@@ -325,6 +331,9 @@ class Objective {
      * @throws Exception
      */
     public static function from(stdClass $obj): Objective {
+        if (!property_exists($obj, 'rewards')) {
+            throw new Exception("Missing required property");
+        }
         return new Objective(
          Objective::fromRewards($obj->{'rewards'})
         );
diff --git a/base/php/test/inputs/json/priority/bug2521.json/default/TopLevel.php b/head/php/test/inputs/json/priority/bug2521.json/default/TopLevel.php
index ad22131..5157a5a 100644
--- a/base/php/test/inputs/json/priority/bug2521.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/bug2521.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'options')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromOptions($obj->{'options'})
         );
@@ -256,6 +259,9 @@ class Option {
      * @throws Exception
      */
     public static function from(stdClass $obj): Option {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new Option(
          Option::fromFoo($obj->{'foo'})
         ,Option::fromName($obj->{'name'})
diff --git a/base/php/test/inputs/json/priority/bug2590.json/default/TopLevel.php b/head/php/test/inputs/json/priority/bug2590.json/default/TopLevel.php
index 893589c..7d13867 100644
--- a/base/php/test/inputs/json/priority/bug2590.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/bug2590.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'invoices')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromInvoices($obj->{'invoices'})
         );
@@ -325,6 +328,15 @@ class Invoice {
      * @throws Exception
      */
     public static function from(stdClass $obj): Invoice {
+        if (!property_exists($obj, 'createdAt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'dueDate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new Invoice(
          Invoice::fromCreatedAt($obj->{'createdAt'})
         ,Invoice::fromDueDate($obj->{'dueDate'})
diff --git a/base/php/test/inputs/json/priority/bug2663.json/default/TopLevel.php b/head/php/test/inputs/json/priority/bug2663.json/default/TopLevel.php
index 46062dd..cccbe55 100644
--- a/base/php/test/inputs/json/priority/bug2663.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/bug2663.json/default/TopLevel.php
@@ -195,6 +195,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'birthday')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lastSeen')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBirthday($obj->{'birthday'})
         ,TopLevel::fromLastSeen($obj->{'lastSeen'})
diff --git a/base/php/test/inputs/json/priority/bug2793.json/default/TopLevel.php b/head/php/test/inputs/json/priority/bug2793.json/default/TopLevel.php
index 2e97add..ec794e9 100644
--- a/base/php/test/inputs/json/priority/bug2793.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/bug2793.json/default/TopLevel.php
@@ -138,6 +138,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'Hints')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Labels')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromHints($obj->{'Hints'})
         ,TopLevel::fromLabels($obj->{'Labels'})
@@ -335,6 +341,12 @@ class Labels {
      * @throws Exception
      */
     public static function from(stdClass $obj): Labels {
+        if (!property_exists($obj, 'AccountNumber')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Title')) {
+            throw new Exception("Missing required property");
+        }
         return new Labels(
          Labels::fromAccountNumber($obj->{'AccountNumber'})
         ,Labels::fromTitle($obj->{'Title'})
diff --git a/base/php/test/inputs/json/priority/bug427.json/default/TopLevel.php b/head/php/test/inputs/json/priority/bug427.json/default/TopLevel.php
index a352237..465ea32 100644
--- a/base/php/test/inputs/json/priority/bug427.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/bug427.json/default/TopLevel.php
@@ -369,6 +369,24 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'children')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'groups')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromChildren($obj->{'children'})
         ,TopLevel::fromFlags($obj->{'flags'})
@@ -994,6 +1012,33 @@ class TopLevelChild {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevelChild {
+        if (!property_exists($obj, 'children')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'groups')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'originalName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sources')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevelChild(
          TopLevelChild::fromChildren($obj->{'children'})
         ,TopLevelChild::fromComment($obj->{'comment'})
@@ -2164,6 +2209,24 @@ class PurpleChild {
      * @throws Exception
      */
     public static function from(stdClass $obj): PurpleChild {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sources')) {
+            throw new Exception("Missing required property");
+        }
         return new PurpleChild(
          PurpleChild::fromChildren($obj->{'children'})
         ,PurpleChild::fromComment($obj->{'comment'})
@@ -3293,6 +3356,24 @@ class FluffyChild {
      * @throws Exception
      */
     public static function from(stdClass $obj): FluffyChild {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sources')) {
+            throw new Exception("Missing required property");
+        }
         return new FluffyChild(
          FluffyChild::fromChildren($obj->{'children'})
         ,FluffyChild::fromComment($obj->{'comment'})
@@ -3959,6 +4040,24 @@ class TentacledChild {
      * @throws Exception
      */
     public static function from(stdClass $obj): TentacledChild {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sources')) {
+            throw new Exception("Missing required property");
+        }
         return new TentacledChild(
          TentacledChild::fromComment($obj->{'comment'})
         ,TentacledChild::fromDefaultValue($obj->{'defaultValue'})
@@ -4075,6 +4174,9 @@ class PurpleComment {
      * @throws Exception
      */
     public static function from(stdClass $obj): PurpleComment {
+        if (!property_exists($obj, 'shortText')) {
+            throw new Exception("Missing required property");
+        }
         return new PurpleComment(
          PurpleComment::fromShortText($obj->{'shortText'})
         );
@@ -4748,6 +4850,27 @@ class PurpleSignature {
      * @throws Exception
      */
     public static function from(stdClass $obj): PurpleSignature {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'parameters')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new PurpleSignature(
          PurpleSignature::fromComment($obj->{'comment'})
         ,PurpleSignature::fromFlags($obj->{'flags'})
@@ -5144,6 +5267,9 @@ class GetSignatureType {
      * @throws Exception
      */
     public static function from(stdClass $obj): GetSignatureType {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new GetSignatureType(
          GetSignatureType::fromDeclaration($obj->{'declaration'})
         ,GetSignatureType::fromElementType($obj->{'elementType'})
@@ -5584,6 +5710,24 @@ class IndexSignatureElement {
      * @throws Exception
      */
     public static function from(stdClass $obj): IndexSignatureElement {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new IndexSignatureElement(
          IndexSignatureElement::fromFlags($obj->{'flags'})
         ,IndexSignatureElement::fromID($obj->{'id'})
@@ -5821,6 +5965,9 @@ class PurpleType {
      * @throws Exception
      */
     public static function from(stdClass $obj): PurpleType {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new PurpleType(
          PurpleType::fromDeclaration($obj->{'declaration'})
         ,PurpleType::fromName($obj->{'name'})
@@ -6313,6 +6460,27 @@ class GetSignatureChild {
      * @throws Exception
      */
     public static function from(stdClass $obj): GetSignatureChild {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sources')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new GetSignatureChild(
          GetSignatureChild::fromComment($obj->{'comment'})
         ,GetSignatureChild::fromFlags($obj->{'flags'})
@@ -7266,6 +7434,21 @@ class GetSignature {
      * @throws Exception
      */
     public static function from(stdClass $obj): GetSignature {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new GetSignature(
          GetSignature::fromChildren($obj->{'children'})
         ,GetSignature::fromComment($obj->{'comment'})
@@ -7444,6 +7627,12 @@ class ElementType {
      * @throws Exception
      */
     public static function from(stdClass $obj): ElementType {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new ElementType(
          ElementType::fromName($obj->{'name'})
         ,ElementType::fromType($obj->{'type'})
@@ -7694,6 +7883,9 @@ class FluffyComment {
      * @throws Exception
      */
     public static function from(stdClass $obj): FluffyComment {
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new FluffyComment(
          FluffyComment::fromText($obj->{'text'})
         );
@@ -8005,6 +8197,15 @@ class Source {
      * @throws Exception
      */
     public static function from(stdClass $obj): Source {
+        if (!property_exists($obj, 'character')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fileName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'line')) {
+            throw new Exception("Missing required property");
+        }
         return new Source(
          Source::fromCharacter($obj->{'character'})
         ,Source::fromFileName($obj->{'fileName'})
@@ -8554,6 +8755,15 @@ class Group {
      * @throws Exception
      */
     public static function from(stdClass $obj): Group {
+        if (!property_exists($obj, 'children')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
         return new Group(
          Group::fromChildren($obj->{'children'})
         ,Group::fromKind($obj->{'kind'})
@@ -8982,6 +9192,24 @@ class GetSignatureParameter {
      * @throws Exception
      */
     public static function from(stdClass $obj): GetSignatureParameter {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new GetSignatureParameter(
          GetSignatureParameter::fromComment($obj->{'comment'})
         ,GetSignatureParameter::fromFlags($obj->{'flags'})
@@ -9682,6 +9910,9 @@ class FluffyType {
      * @throws Exception
      */
     public static function from(stdClass $obj): FluffyType {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new FluffyType(
          FluffyType::fromElementType($obj->{'elementType'})
         ,FluffyType::fromName($obj->{'name'})
@@ -9913,6 +10144,9 @@ class TentacledType {
      * @throws Exception
      */
     public static function from(stdClass $obj): TentacledType {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new TentacledType(
          TentacledType::fromDeclaration($obj->{'declaration'})
         ,TentacledType::fromName($obj->{'name'})
@@ -10352,6 +10586,27 @@ class PurpleDeclaration {
      * @throws Exception
      */
     public static function from(stdClass $obj): PurpleDeclaration {
+        if (!property_exists($obj, 'children')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'groups')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new PurpleDeclaration(
          PurpleDeclaration::fromChildren($obj->{'children'})
         ,PurpleDeclaration::fromFlags($obj->{'flags'})
@@ -10726,6 +10981,9 @@ class TypeElement {
      * @throws Exception
      */
     public static function from(stdClass $obj): TypeElement {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new TypeElement(
          TypeElement::fromDeclaration($obj->{'declaration'})
         ,TypeElement::fromElementType($obj->{'elementType'})
@@ -11196,6 +11454,12 @@ class Tag {
      * @throws Exception
      */
     public static function from(stdClass $obj): Tag {
+        if (!property_exists($obj, 'tag')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new Tag(
          Tag::fromTag($obj->{'tag'})
         ,Tag::fromText($obj->{'text'})
@@ -12040,6 +12304,12 @@ class ExtendedBy {
      * @throws Exception
      */
     public static function from(stdClass $obj): ExtendedBy {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new ExtendedBy(
          ExtendedBy::fromConstraint($obj->{'constraint'})
         ,ExtendedBy::fromID($obj->{'id'})
@@ -12809,6 +13079,24 @@ class FluffySignature {
      * @throws Exception
      */
     public static function from(stdClass $obj): FluffySignature {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new FluffySignature(
          FluffySignature::fromComment($obj->{'comment'})
         ,FluffySignature::fromFlags($obj->{'flags'})
@@ -13427,6 +13715,24 @@ class PurpleParameter {
      * @throws Exception
      */
     public static function from(stdClass $obj): PurpleParameter {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new PurpleParameter(
          PurpleParameter::fromComment($obj->{'comment'})
         ,PurpleParameter::fromFlags($obj->{'flags'})
@@ -13999,6 +14305,9 @@ class StickyType {
      * @throws Exception
      */
     public static function from(stdClass $obj): StickyType {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new StickyType(
          StickyType::fromConstraint($obj->{'constraint'})
         ,StickyType::fromDeclaration($obj->{'declaration'})
@@ -14647,6 +14956,9 @@ class IndigoType {
      * @throws Exception
      */
     public static function from(stdClass $obj): IndigoType {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new IndigoType(
          IndigoType::fromConstraint($obj->{'constraint'})
         ,IndigoType::fromDeclaration($obj->{'declaration'})
@@ -15319,6 +15631,24 @@ class FluffyDeclaration {
      * @throws Exception
      */
     public static function from(stdClass $obj): FluffyDeclaration {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sources')) {
+            throw new Exception("Missing required property");
+        }
         return new FluffyDeclaration(
          FluffyDeclaration::fromChildren($obj->{'children'})
         ,FluffyDeclaration::fromFlags($obj->{'flags'})
@@ -15825,6 +16155,27 @@ class StickyChild {
      * @throws Exception
      */
     public static function from(stdClass $obj): StickyChild {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sources')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new StickyChild(
          StickyChild::fromComment($obj->{'comment'})
         ,StickyChild::fromFlags($obj->{'flags'})
@@ -16138,6 +16489,9 @@ class IndecentType {
      * @throws Exception
      */
     public static function from(stdClass $obj): IndecentType {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new IndecentType(
          IndecentType::fromDeclaration($obj->{'declaration'})
         ,IndecentType::fromElements($obj->{'elements'})
@@ -16568,6 +16922,27 @@ class IndexSignature {
      * @throws Exception
      */
     public static function from(stdClass $obj): IndexSignature {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'parameters')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new IndexSignature(
          IndexSignature::fromFlags($obj->{'flags'})
         ,IndexSignature::fromID($obj->{'id'})
@@ -16732,6 +17107,12 @@ class HilariousType {
      * @throws Exception
      */
     public static function from(stdClass $obj): HilariousType {
+        if (!property_exists($obj, 'declaration')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new HilariousType(
          HilariousType::fromDeclaration($obj->{'declaration'})
         ,HilariousType::fromType($obj->{'type'})
@@ -17232,6 +17613,24 @@ class TentacledSignature {
      * @throws Exception
      */
     public static function from(stdClass $obj): TentacledSignature {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new TentacledSignature(
          TentacledSignature::fromComment($obj->{'comment'})
         ,TentacledSignature::fromFlags($obj->{'flags'})
@@ -17396,6 +17795,12 @@ class IndigoComment {
      * @throws Exception
      */
     public static function from(stdClass $obj): IndigoComment {
+        if (!property_exists($obj, 'returns')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'shortText')) {
+            throw new Exception("Missing required property");
+        }
         return new IndigoComment(
          IndigoComment::fromReturns($obj->{'returns'})
         ,IndigoComment::fromShortText($obj->{'shortText'})
@@ -17895,6 +18300,24 @@ class FluffyParameter {
      * @throws Exception
      */
     public static function from(stdClass $obj): FluffyParameter {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new FluffyParameter(
          FluffyParameter::fromComment($obj->{'comment'})
         ,FluffyParameter::fromFlags($obj->{'flags'})
@@ -18112,6 +18535,15 @@ class PurpleTypeArgument {
      * @throws Exception
      */
     public static function from(stdClass $obj): PurpleTypeArgument {
+        if (!property_exists($obj, 'operator')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'target')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new PurpleTypeArgument(
          PurpleTypeArgument::fromOperator($obj->{'operator'})
         ,PurpleTypeArgument::fromTarget($obj->{'target'})
@@ -19243,6 +19675,27 @@ class StickySignature {
      * @throws Exception
      */
     public static function from(stdClass $obj): StickySignature {
+        if (!property_exists($obj, 'comment')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new StickySignature(
          StickySignature::fromComment($obj->{'comment'})
         ,StickySignature::fromFlags($obj->{'flags'})
@@ -19807,6 +20260,24 @@ class TentacledParameter {
      * @throws Exception
      */
     public static function from(stdClass $obj): TentacledParameter {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new TentacledParameter(
          TentacledParameter::fromComment($obj->{'comment'})
         ,TentacledParameter::fromDefaultValue($obj->{'defaultValue'})
@@ -20246,6 +20717,9 @@ class AmbitiousType {
      * @throws Exception
      */
     public static function from(stdClass $obj): AmbitiousType {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new AmbitiousType(
          AmbitiousType::fromDeclaration($obj->{'declaration'})
         ,AmbitiousType::fromElementType($obj->{'elementType'})
@@ -20912,6 +21386,24 @@ class TentacledDeclaration {
      * @throws Exception
      */
     public static function from(stdClass $obj): TentacledDeclaration {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sources')) {
+            throw new Exception("Missing required property");
+        }
         return new TentacledDeclaration(
          TentacledDeclaration::fromChildren($obj->{'children'})
         ,TentacledDeclaration::fromFlags($obj->{'flags'})
@@ -21470,6 +21962,30 @@ class IndigoChild {
      * @throws Exception
      */
     public static function from(stdClass $obj): IndigoChild {
+        if (!property_exists($obj, 'comment')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sources')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new IndigoChild(
          IndigoChild::fromComment($obj->{'comment'})
         ,IndigoChild::fromDefaultValue($obj->{'defaultValue'})
@@ -21847,6 +22363,9 @@ class CunningType {
      * @throws Exception
      */
     public static function from(stdClass $obj): CunningType {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new CunningType(
          CunningType::fromDeclaration($obj->{'declaration'})
         ,CunningType::fromID($obj->{'id'})
@@ -22488,6 +23007,9 @@ class MagentaType {
      * @throws Exception
      */
     public static function from(stdClass $obj): MagentaType {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new MagentaType(
          MagentaType::fromDeclaration($obj->{'declaration'})
         ,MagentaType::fromElementType($obj->{'elementType'})
@@ -23087,6 +23609,27 @@ class StickyDeclaration {
      * @throws Exception
      */
     public static function from(stdClass $obj): StickyDeclaration {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'signatures')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sources')) {
+            throw new Exception("Missing required property");
+        }
         return new StickyDeclaration(
          StickyDeclaration::fromChildren($obj->{'children'})
         ,StickyDeclaration::fromFlags($obj->{'flags'})
@@ -23528,6 +24071,27 @@ class IndecentChild {
      * @throws Exception
      */
     public static function from(stdClass $obj): IndecentChild {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sources')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new IndecentChild(
          IndecentChild::fromFlags($obj->{'flags'})
         ,IndecentChild::fromID($obj->{'id'})
@@ -23765,6 +24329,9 @@ class FriskyType {
      * @throws Exception
      */
     public static function from(stdClass $obj): FriskyType {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new FriskyType(
          FriskyType::fromDeclaration($obj->{'declaration'})
         ,FriskyType::fromName($obj->{'name'})
@@ -24362,6 +24929,24 @@ class IndigoDeclaration {
      * @throws Exception
      */
     public static function from(stdClass $obj): IndigoDeclaration {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sources')) {
+            throw new Exception("Missing required property");
+        }
         return new IndigoDeclaration(
          IndigoDeclaration::fromChildren($obj->{'children'})
         ,IndigoDeclaration::fromFlags($obj->{'flags'})
@@ -24541,6 +25126,12 @@ class FluffyTypeArgument {
      * @throws Exception
      */
     public static function from(stdClass $obj): FluffyTypeArgument {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'types')) {
+            throw new Exception("Missing required property");
+        }
         return new FluffyTypeArgument(
          FluffyTypeArgument::fromType($obj->{'type'})
         ,FluffyTypeArgument::fromTypes($obj->{'types'})
@@ -24976,6 +25567,21 @@ class TypeParameter {
      * @throws Exception
      */
     public static function from(stdClass $obj): TypeParameter {
+        if (!property_exists($obj, 'flags')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new TypeParameter(
          TypeParameter::fromComment($obj->{'comment'})
         ,TypeParameter::fromFlags($obj->{'flags'})
@@ -25336,6 +25942,9 @@ class MischievousType {
      * @throws Exception
      */
     public static function from(stdClass $obj): MischievousType {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new MischievousType(
          MischievousType::fromID($obj->{'id'})
         ,MischievousType::fromName($obj->{'name'})
@@ -25516,6 +26125,9 @@ class IndecentComment {
      * @throws Exception
      */
     public static function from(stdClass $obj): IndecentComment {
+        if (!property_exists($obj, 'shortText')) {
+            throw new Exception("Missing required property");
+        }
         return new IndecentComment(
          IndecentComment::fromShortText($obj->{'shortText'})
         ,IndecentComment::fromTags($obj->{'tags'})
diff --git a/base/php/test/inputs/json/priority/bug790.json/default/TopLevel.php b/head/php/test/inputs/json/priority/bug790.json/default/TopLevel.php
index 09b0763..03230cc 100644
--- a/base/php/test/inputs/json/priority/bug790.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/bug790.json/default/TopLevel.php
@@ -460,6 +460,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'children_data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_active')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'level')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'parent_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'position')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'product_count')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromChildrenData($obj->{'children_data'})
         ,TopLevel::fromID($obj->{'id'})
diff --git a/base/php/test/inputs/json/priority/bug855-short.json/default/TopLevel.php b/head/php/test/inputs/json/priority/bug855-short.json/default/TopLevel.php
index 4d56ec8..9ff907b 100644
--- a/base/php/test/inputs/json/priority/bug855-short.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/bug855-short.json/default/TopLevel.php
@@ -296,6 +296,21 @@ class TopLevelValue {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevelValue {
+        if (!property_exists($obj, 'channel_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'channel_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'emoticon_set')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevelValue(
          TopLevelValue::fromChannelID($obj->{'channel_id'})
         ,TopLevelValue::fromChannelName($obj->{'channel_name'})
diff --git a/base/php/test/inputs/json/priority/coin-pairs.json/default/TopLevel.php b/head/php/test/inputs/json/priority/coin-pairs.json/default/TopLevel.php
index 09e7cb0..170ae35 100644
--- a/base/php/test/inputs/json/priority/coin-pairs.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/coin-pairs.json/default/TopLevel.php
@@ -151,6 +151,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'pairs')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'server_time')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromPairs($obj->{'pairs'})
         ,TopLevel::fromServerTime($obj->{'server_time'})
@@ -615,6 +621,30 @@ class Pair {
      * @throws Exception
      */
     public static function from(stdClass $obj): Pair {
+        if (!property_exists($obj, 'decimal_places')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fee')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hidden')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'max_amount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'max_price')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'min_amount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'min_price')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'min_total')) {
+            throw new Exception("Missing required property");
+        }
         return new Pair(
          Pair::fromDecimalPlaces($obj->{'decimal_places'})
         ,Pair::fromFee($obj->{'fee'})
diff --git a/base/php/test/inputs/json/priority/combinations1.json/default/TopLevel.php b/head/php/test/inputs/json/priority/combinations1.json/default/TopLevel.php
index 808dadc..b79b022 100644
--- a/base/php/test/inputs/json/priority/combinations1.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/combinations1.json/default/TopLevel.php
@@ -3957,6 +3957,135 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'centrodesmose')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cerograph')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'chemotherapeutics')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cimelia')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'citrated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'clinodome')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'coadjust')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'consilience')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'constructor')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'continuative')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'credulity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'creviced')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cubiculum')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'deruralize')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'diaereses')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'dissolution')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downstroke')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'electrotautomerism')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'eleutheromania')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'encrust')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'entomoid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'epipaleolithic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'expropriable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'faggingly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fenks')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'flagmaking')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fluorometer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fulsome')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fuzzy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gardenwards')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'generalissimo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'habeas')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hemicrystalline')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hemocoele')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hoister')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hyperpiesis')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hyppish')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'idealizer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'incrustator')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'intentiveness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'interacinar')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'intercorrelation')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'jacutinga')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCentrodesmose($obj->{'centrodesmose'})
         ,TopLevel::fromCerograph($obj->{'cerograph'})
@@ -5187,6 +5316,66 @@ class Cerograph {
      * @throws Exception
      */
     public static function from(stdClass $obj): Cerograph {
+        if (!property_exists($obj, 'apotropaion')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'casuary')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'creaker')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'disqualification')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'imperatorious')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'impermeabilize')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'metastoma')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'noctidiurnal')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nonreserve')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ophthalmotonometry')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pailful')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pigfish')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pongee')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'prosodical')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scrofuloderm')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'storekeeping')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'therologist')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Tolowa')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tradeful')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unriveting')) {
+            throw new Exception("Missing required property");
+        }
         return new Cerograph(
          Cerograph::fromApotropaion($obj->{'apotropaion'})
         ,Cerograph::fromCasuary($obj->{'casuary'})
@@ -7031,6 +7220,21 @@ class Cimelia {
      * @throws Exception
      */
     public static function from(stdClass $obj): Cimelia {
+        if (!property_exists($obj, 'catharticalness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Chirotherium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'disdiapason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'homocerc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nonbookish')) {
+            throw new Exception("Missing required property");
+        }
         return new Cimelia(
          Cimelia::fromCatharticalness($obj->{'catharticalness'})
         ,Cimelia::fromChirotherium($obj->{'Chirotherium'})
@@ -9682,6 +9886,66 @@ class Credulity {
      * @throws Exception
      */
     public static function from(stdClass $obj): Credulity {
+        if (!property_exists($obj, 'ammonolytic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bushmaster')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'considering')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'consuetudinary')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'embarras')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fineness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'flaithship')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Flavia')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gruffly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Hedychium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'leadwort')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'overseriously')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'parabola')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pectinatodenticulate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Popean')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pornocrat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'quadrisect')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'seriality')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'vamphorn')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wharp')) {
+            throw new Exception("Missing required property");
+        }
         return new Credulity(
          Credulity::fromAmmonolytic($obj->{'ammonolytic'})
         ,Credulity::fromBushmaster($obj->{'bushmaster'})
@@ -10866,6 +11130,66 @@ class Deruralize {
      * @throws Exception
      */
     public static function from(stdClass $obj): Deruralize {
+        if (!property_exists($obj, 'bockerel')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'boulder')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'churrus')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'counterdigged')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'dialogite')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'digenic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'dunbird')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ergatogyne')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fiendful')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'jackrod')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Jehovistic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Paninean')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'panther')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'placentigerous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Romney')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sparm')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tocsin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unnicked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unstavable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'windfirm')) {
+            throw new Exception("Missing required property");
+        }
         return new Deruralize(
          Deruralize::fromBockerel($obj->{'bockerel'})
         ,Deruralize::fromBoulder($obj->{'boulder'})
@@ -12050,6 +12374,66 @@ class Diaerese {
      * @throws Exception
      */
     public static function from(stdClass $obj): Diaerese {
+        if (!property_exists($obj, 'Amoreuxia')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ani')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bernicle')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'blackwasher')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'blowhard')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'broma')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closecross')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'congregationalism')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'grayly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'historically')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hoast')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'irretentive')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'parcener')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pedder')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pseudoanatomic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rhizocarpian')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'samel')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'silker')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subdentated')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subobscure')) {
+            throw new Exception("Missing required property");
+        }
         return new Diaerese(
          Diaerese::fromAmoreuxia($obj->{'Amoreuxia'})
         ,Diaerese::fromAni($obj->{'ani'})
@@ -13234,6 +13618,66 @@ class Encrust {
      * @throws Exception
      */
     public static function from(stdClass $obj): Encrust {
+        if (!property_exists($obj, 'comradely')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'diacanthous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'feminineness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gossamered')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Hibernia')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Hibiscus')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Lepidosauria')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lollingly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'manager')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mechanic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'overminuteness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'papelonne')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'plebification')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pugmiller')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'recoveror')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'spermatoblastic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Syllidae')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ungyved')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'whirlabout')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'woodenware')) {
+            throw new Exception("Missing required property");
+        }
         return new Encrust(
          Encrust::fromComradely($obj->{'comradely'})
         ,Encrust::fromDiacanthous($obj->{'diacanthous'})
@@ -14418,6 +14862,66 @@ class Faggingly {
      * @throws Exception
      */
     public static function from(stdClass $obj): Faggingly {
+        if (!property_exists($obj, 'abranchian')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'aculeiform')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'adiaphoristic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'adoptionism')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Anglic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'antrotomy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'coerciveness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'decorist')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'duckhood')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Heteromeri')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hypochnose')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lochage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'melee')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nonconformitant')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Poinsettia')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'putatively')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'semivolatile')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'soleas')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unfastenable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unmillinered')) {
+            throw new Exception("Missing required property");
+        }
         return new Faggingly(
          Faggingly::fromAbranchian($obj->{'abranchian'})
         ,Faggingly::fromAculeiform($obj->{'aculeiform'})
@@ -15602,6 +16106,66 @@ class Fenk {
      * @throws Exception
      */
     public static function from(stdClass $obj): Fenk {
+        if (!property_exists($obj, 'apoise')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'astronomize')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cockhorse')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'copular')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Dagomba')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'draffy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'foreigner')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Guyandot')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'neurogliosis')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'osmious')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'palpitate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rebukeable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Reinwardtia')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'reservatory')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scalt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scripturalize')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tintometer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Tritoness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'undergrade')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'undermountain')) {
+            throw new Exception("Missing required property");
+        }
         return new Fenk(
          Fenk::fromApoise($obj->{'apoise'})
         ,Fenk::fromAstronomize($obj->{'astronomize'})
@@ -16786,6 +17350,66 @@ class Flagmaking {
      * @throws Exception
      */
     public static function from(stdClass $obj): Flagmaking {
+        if (!property_exists($obj, 'albarco')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Bunodonta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hornify')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Hydrocorisae')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hypoglossus')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'inexpiably')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ingratitude')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ladyfly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'medicament')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'monogrammatic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nobbut')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Notacanthidae')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'polyplacophore')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'proexercise')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'protoplast')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'puzzling')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'splanchnoskeleton')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unloveliness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unquarantined')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unrenounceable')) {
+            throw new Exception("Missing required property");
+        }
         return new Flagmaking(
          Flagmaking::fromAlbarco($obj->{'albarco'})
         ,Flagmaking::fromBunodonta($obj->{'Bunodonta'})
@@ -18630,6 +19254,21 @@ class Interacinar {
      * @throws Exception
      */
     public static function from(stdClass $obj): Interacinar {
+        if (!property_exists($obj, 'assapan')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'benefactorship')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'triseriatim')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tubbing')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'untrimmed')) {
+            throw new Exception("Missing required property");
+        }
         return new Interacinar(
          Interacinar::fromAssapan($obj->{'assapan'})
         ,Interacinar::fromBenefactorship($obj->{'benefactorship'})
diff --git a/base/php/test/inputs/json/priority/combinations2.json/default/TopLevel.php b/head/php/test/inputs/json/priority/combinations2.json/default/TopLevel.php
index e731bd5..7fa15f3 100644
--- a/base/php/test/inputs/json/priority/combinations2.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/combinations2.json/default/TopLevel.php
@@ -4256,6 +4256,141 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'Abranchiata')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'academe')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'acquirable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'aerometry')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'alexin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'alleviate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'amaas')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ambassage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'amphithyron')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Andriana')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ankee')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'annihilator')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'annulose')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Ansarie')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'aphasia')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'asprawl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'attractive')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'barksome')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bedesman')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'belard')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bocking')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'brawlingly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'brookie')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bumboatman')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bystreet')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'calaverite')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'catallactic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cemental')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Chytridiaceae')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Discordia')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Endomyces')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Epinephelidae')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Eupatorium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Gryphosaurus')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Koryak')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Lavinia')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Oskar')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Rebecca')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Rhomboganoidei')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Rigsmal')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Ruellia')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'School')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Shakespearolater')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Svan')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Wayao')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromAbranchiata($obj->{'Abranchiata'})
         ,TopLevel::fromAcademe($obj->{'academe'})
@@ -5490,6 +5625,66 @@ class Alleviate {
      * @throws Exception
      */
     public static function from(stdClass $obj): Alleviate {
+        if (!property_exists($obj, 'apriori')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'beggarer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'brokenheartedly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'debilitation')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'frike')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gastrolith')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Hulsean')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'orthocentric')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'petaly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'probudgeting')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'reacquire')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scow')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'shutoff')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subcontiguous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'suffumigate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'transformable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uncoroneted')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unparking')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unvarnishedness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wherewithal')) {
+            throw new Exception("Missing required property");
+        }
         return new Alleviate(
          Alleviate::fromApriori($obj->{'apriori'})
         ,Alleviate::fromBeggarer($obj->{'beggarer'})
@@ -5837,6 +6032,21 @@ class Rebecca {
      * @throws Exception
      */
     public static function from(stdClass $obj): Rebecca {
+        if (!property_exists($obj, 'catharticalness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Chirotherium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'disdiapason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'homocerc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nonbookish')) {
+            throw new Exception("Missing required property");
+        }
         return new Rebecca(
          Rebecca::fromCatharticalness($obj->{'catharticalness'})
         ,Rebecca::fromChirotherium($obj->{'Chirotherium'})
@@ -8628,6 +8838,66 @@ class Ankee {
      * @throws Exception
      */
     public static function from(stdClass $obj): Ankee {
+        if (!property_exists($obj, 'Anomoean')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'barleyhood')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'befriender')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'brutishness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cephalalgy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cirurgian')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'conventionally')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'jackshay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'milammeter')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Naja')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ombrological')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'phonasthenia')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'retrievableness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'snakily')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'swot')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tartlet')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thiofuran')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tracheophone')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tuglike')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unscratchingly')) {
+            throw new Exception("Missing required property");
+        }
         return new Ankee(
          Ankee::fromAnomoean($obj->{'Anomoean'})
         ,Ankee::fromBarleyhood($obj->{'barleyhood'})
@@ -9812,6 +10082,66 @@ class Ansarie {
      * @throws Exception
      */
     public static function from(stdClass $obj): Ansarie {
+        if (!property_exists($obj, 'accension')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Alida')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'asteria')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'beriberic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'edgebone')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gastrodialysis')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'geographic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Ictonyx')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'metrocele')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'misgraft')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'monteith')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'notcher')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'prorestriction')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Ramist')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'throatlet')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unfair')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unsynonymous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'water')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'zestfully')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'zincic')) {
+            throw new Exception("Missing required property");
+        }
         return new Ansarie(
          Ansarie::fromAccension($obj->{'accension'})
         ,Ansarie::fromAlida($obj->{'Alida'})
@@ -10996,6 +11326,66 @@ class Chytridiaceae {
      * @throws Exception
      */
     public static function from(stdClass $obj): Chytridiaceae {
+        if (!property_exists($obj, 'Batidaceae')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Brechites')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'codespairer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Emery')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'enervative')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'excriminate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'goshenite')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'grime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gritten')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hectorly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'intermediation')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'meeterly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Narraganset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'onymatic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'paddlecock')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thana')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thornily')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uckia')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unmettle')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'vorticellid')) {
+            throw new Exception("Missing required property");
+        }
         return new Chytridiaceae(
          Chytridiaceae::fromBatidaceae($obj->{'Batidaceae'})
         ,Chytridiaceae::fromBrechites($obj->{'Brechites'})
@@ -13817,6 +14207,66 @@ class Gryphosaurus {
      * @throws Exception
      */
     public static function from(stdClass $obj): Gryphosaurus {
+        if (!property_exists($obj, 'amissibility')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Burushaski')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'citronin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'coplaintiff')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'disquisitionary')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'enoplan')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'faintness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hebetomy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'islandry')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lameduck')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'overbattle')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'overinterested')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'phrenologic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rainband')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'shiningly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stamineous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subscapularis')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Tahami')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'undaubed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'underntime')) {
+            throw new Exception("Missing required property");
+        }
         return new Gryphosaurus(
          Gryphosaurus::fromAmissibility($obj->{'amissibility'})
         ,Gryphosaurus::fromBurushaski($obj->{'Burushaski'})
@@ -16638,6 +17088,66 @@ class Oskar {
      * @throws Exception
      */
     public static function from(stdClass $obj): Oskar {
+        if (!property_exists($obj, 'Acrobates')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'beanshooter')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bearhound')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Cayuga')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'guarneri')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hypochondriacism')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'indication')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'jaculative')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nagana')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Netherlandish')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'noctivagous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nonphysiological')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'praxis')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'provision')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subterhuman')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sunlit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'syncraniate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'teachment')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unmutinous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unstoppable')) {
+            throw new Exception("Missing required property");
+        }
         return new Oskar(
          Oskar::fromAcrobates($obj->{'Acrobates'})
         ,Oskar::fromBeanshooter($obj->{'beanshooter'})
diff --git a/base/php/test/inputs/json/priority/combinations3.json/default/TopLevel.php b/head/php/test/inputs/json/priority/combinations3.json/default/TopLevel.php
index 3f13666..f488a67 100644
--- a/base/php/test/inputs/json/priority/combinations3.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/combinations3.json/default/TopLevel.php
@@ -3969,6 +3969,132 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'juror')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kongoni')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ladronism')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'landlubberly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'listener')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lupus')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'maslin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'monazite')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'monoliteral')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'monotheistically')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'montage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'moralness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mowra')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mulishly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'myoscope')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nach')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'neuromastic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'noncontributing')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nonnervous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nonvaluation')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'occupationalist')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'outrival')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'paleographically')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pamphletwise')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pediatrics')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'perceptive')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'piaculum')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'piccadilly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'piffler')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pithful')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'placuntitis')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'plectopterous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pneumocele')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'poliorcetic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'poormaster')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'potwhisky')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'practicalizer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'prefreshman')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'prehensility')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'prevoidance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'probant')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'protext')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromJuror($obj->{'juror'})
         ,TopLevel::fromKongoni($obj->{'kongoni'})
@@ -5197,6 +5323,66 @@ class Juror {
      * @throws Exception
      */
     public static function from(stdClass $obj): Juror {
+        if (!property_exists($obj, 'adipsy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'auxiliator')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'benda')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'benjamin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'brandling')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'epicurishly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'eremochaetous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'marten')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'monocline')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Olea')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'palgat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pennyworth')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pioury')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pragmatistic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stylelessness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'systematical')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thready')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uncontemporary')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uncouched')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uninhabitedness')) {
+            throw new Exception("Missing required property");
+        }
         return new Juror(
          Juror::fromAdipsy($obj->{'adipsy'})
         ,Juror::fromAuxiliator($obj->{'auxiliator'})
@@ -6381,6 +6567,66 @@ class Ladronism {
      * @throws Exception
      */
     public static function from(stdClass $obj): Ladronism {
+        if (!property_exists($obj, 'acclaimer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'achree')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'base')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'conundrumize')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'degerminator')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'describable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'exasperatedly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'heroine')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'indazin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'luteous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'papular')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pritch')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Prodenia')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'seege')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'shopgirl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tragedietta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unsparse')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uplook')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'vermiformis')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'whafabout')) {
+            throw new Exception("Missing required property");
+        }
         return new Ladronism(
          Ladronism::fromAcclaimer($obj->{'acclaimer'})
         ,Ladronism::fromAchree($obj->{'achree'})
@@ -7565,6 +7811,66 @@ class Landlubberly {
      * @throws Exception
      */
     public static function from(stdClass $obj): Landlubberly {
+        if (!property_exists($obj, 'acropoleis')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'aminate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Amyraldism')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bipenniform')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bugre')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'calycule')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'caoutchouc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'disprover')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fitroot')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fulgently')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kickup')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'laevoversion')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'moter')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'objectivity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'posterity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'postnuptial')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'precedentary')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'saddling')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subcurrent')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unrecriminative')) {
+            throw new Exception("Missing required property");
+        }
         return new Landlubberly(
          Landlubberly::fromAcropoleis($obj->{'acropoleis'})
         ,Landlubberly::fromAminate($obj->{'aminate'})
@@ -12326,6 +12632,21 @@ class Monazite {
      * @throws Exception
      */
     public static function from(stdClass $obj): Monazite {
+        if (!property_exists($obj, 'catharticalness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Chirotherium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'disdiapason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'homocerc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nonbookish')) {
+            throw new Exception("Missing required property");
+        }
         return new Monazite(
          Monazite::fromCatharticalness($obj->{'catharticalness'})
         ,Monazite::fromChirotherium($obj->{'Chirotherium'})
@@ -14140,6 +14461,21 @@ class Noncontributing {
      * @throws Exception
      */
     public static function from(stdClass $obj): Noncontributing {
+        if (!property_exists($obj, 'estevin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'jolterhead')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sauternes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sparsely')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unrequested')) {
+            throw new Exception("Missing required property");
+        }
         return new Noncontributing(
          Noncontributing::fromEstevin($obj->{'estevin'})
         ,Noncontributing::fromJolterhead($obj->{'jolterhead'})
@@ -15294,6 +15630,66 @@ class Occupationalist {
      * @throws Exception
      */
     public static function from(stdClass $obj): Occupationalist {
+        if (!property_exists($obj, 'beholdable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'brotuliform')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Chimakum')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'doodler')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'emulsin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Fin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'flourishing')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'flueless')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'furtively')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gritter')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'interwish')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'monoxylic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'myristic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nightwear')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'peruser')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'theoastrological')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumby')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tingitid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trailless')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unpocketed')) {
+            throw new Exception("Missing required property");
+        }
         return new Occupationalist(
          Occupationalist::fromBeholdable($obj->{'beholdable'})
         ,Occupationalist::fromBrotuliform($obj->{'brotuliform'})
@@ -16478,6 +16874,66 @@ class Outrival {
      * @throws Exception
      */
     public static function from(stdClass $obj): Outrival {
+        if (!property_exists($obj, 'adroitly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bridehood')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Castoroides')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Czechoslovak')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'diagenesis')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'dihexahedron')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'dopester')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'eumerism')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'flyness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fouler')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'laudanosine')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Lingulidae')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minutary')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mitra')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'opisthorchiasis')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pensively')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pubigerous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rebellious')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'recodify')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unpaced')) {
+            throw new Exception("Missing required property");
+        }
         return new Outrival(
          Outrival::fromAdroitly($obj->{'adroitly'})
         ,Outrival::fromBridehood($obj->{'bridehood'})
@@ -20796,6 +21252,66 @@ class Potwhisky {
      * @throws Exception
      */
     public static function from(stdClass $obj): Potwhisky {
+        if (!property_exists($obj, 'arciform')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cresolin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'disheartener')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'disproportionable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Euchorda')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ferryway')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'filamentiferous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'flemish')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forgainst')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'grainering')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'irrevoluble')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kindredship')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pinguitudinous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'simpletonic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'singsong')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'submergement')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'supraoesophagal')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thrashel')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tyremesis')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Yoruba')) {
+            throw new Exception("Missing required property");
+        }
         return new Potwhisky(
          Potwhisky::fromArciform($obj->{'arciform'})
         ,Potwhisky::fromCresolin($obj->{'cresolin'})
@@ -21980,6 +22496,66 @@ class Prefreshman {
      * @throws Exception
      */
     public static function from(stdClass $obj): Prefreshman {
+        if (!property_exists($obj, 'azorubine')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'choroiditis')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'coagulatory')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cyclorama')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Dolphus')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'duckhearted')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Ficus')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Gemaric')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'jugation')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'myoliposis')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nonnomination')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'palay')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pentactinal')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Phaet')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'piquant')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'registration')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'remancipation')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scutatiform')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'theodolite')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'underward')) {
+            throw new Exception("Missing required property");
+        }
         return new Prefreshman(
          Prefreshman::fromAzorubine($obj->{'azorubine'})
         ,Prefreshman::fromChoroiditis($obj->{'choroiditis'})
diff --git a/base/php/test/inputs/json/priority/combinations4.json/default/TopLevel.php b/head/php/test/inputs/json/priority/combinations4.json/default/TopLevel.php
index 8e64115..6c1d787 100644
--- a/base/php/test/inputs/json/priority/combinations4.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/combinations4.json/default/TopLevel.php
@@ -4884,6 +4884,162 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'protrusive')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pulpitism')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pyodermia')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'quebrachine')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'querier')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rebarbative')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'reimagine')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ressaut')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'retrocervical')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'revert')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rewrite')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'saccoderm')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'santir')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'saprophilous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'saxten')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scatty')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scoffer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scrampum')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'semantic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'serpentinic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'shadowable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sistering')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'staghunting')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stagmometer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stimulability')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'strangleable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'strenuosity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tabaxir')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'talpiform')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thwack')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'to')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tortricine')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'truantcy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'turgesce')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unbeginning')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'underdunged')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'undesirability')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unerasing')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unguentarium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unimpeachably')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unmortgaged')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unobstructed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unreceptivity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unsatisfactoriness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unsecurity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unstressed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'untasked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unvarying')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'vehemently')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'warriorship')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'whitepot')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wrothy')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromProtrusive($obj->{'protrusive'})
         ,TopLevel::fromPulpitism($obj->{'pulpitism'})
@@ -6132,6 +6288,66 @@ class Pulpitism {
      * @throws Exception
      */
     public static function from(stdClass $obj): Pulpitism {
+        if (!property_exists($obj, 'abnet')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'buckhorn')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'calciform')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'chelophore')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cogitation')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'decreeable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'despicable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'isodiazo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'jadedly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'leptochlorite')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nursling')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'palamedean')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'photoheliograph')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pipewood')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'roberd')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'statable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'superassume')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'syllabe')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'toughhead')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'underburn')) {
+            throw new Exception("Missing required property");
+        }
         return new Pulpitism(
          Pulpitism::fromAbnet($obj->{'abnet'})
         ,Pulpitism::fromBuckhorn($obj->{'buckhorn'})
@@ -7316,6 +7532,66 @@ class Pyodermia {
      * @throws Exception
      */
     public static function from(stdClass $obj): Pyodermia {
+        if (!property_exists($obj, 'aphoristically')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'apophyllous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cognize')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'dermonosology')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Gyppo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ither')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'juglandaceous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'litho')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'macropterous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'photographer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'romancing')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rumness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'somniloquist')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stressfully')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tactically')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tracheophony')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unappositely')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unclothedly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unimplied')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unsyncopated')) {
+            throw new Exception("Missing required property");
+        }
         return new Pyodermia(
          Pyodermia::fromAphoristically($obj->{'aphoristically'})
         ,Pyodermia::fromApophyllous($obj->{'apophyllous'})
@@ -7663,6 +7939,21 @@ class Quebrachine {
      * @throws Exception
      */
     public static function from(stdClass $obj): Quebrachine {
+        if (!property_exists($obj, 'catharticalness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Chirotherium')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'disdiapason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'homocerc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nonbookish')) {
+            throw new Exception("Missing required property");
+        }
         return new Quebrachine(
          Quebrachine::fromCatharticalness($obj->{'catharticalness'})
         ,Quebrachine::fromChirotherium($obj->{'Chirotherium'})
@@ -10254,6 +10545,66 @@ class Ressaut {
      * @throws Exception
      */
     public static function from(stdClass $obj): Ressaut {
+        if (!property_exists($obj, 'apperceptive')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cuttoo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'douser')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'drinkproof')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forementioned')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Freesia')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Genevieve')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hyperdiabolical')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hypocone')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'irreverentially')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'jumart')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Mimosaceae')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mollicrush')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nedder')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'retinasphalt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sough')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'steading')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Theopaschitism')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'undurableness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unmingleable')) {
+            throw new Exception("Missing required property");
+        }
         return new Ressaut(
          Ressaut::fromApperceptive($obj->{'apperceptive'})
         ,Ressaut::fromCuttoo($obj->{'cuttoo'})
@@ -11438,6 +11789,66 @@ class Rewrite {
      * @throws Exception
      */
     public static function from(stdClass $obj): Rewrite {
+        if (!property_exists($obj, 'accountancy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cacotrophic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'contest')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'couthily')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'falculate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'foreseize')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Hyades')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lemnad')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'monotheistically')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nonflying')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Ptenoglossa')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'repatch')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rodman')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'strung')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'titmal')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'twalpennyworth')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unblamable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'vertical')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Whiggification')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'yardman')) {
+            throw new Exception("Missing required property");
+        }
         return new Rewrite(
          Rewrite::fromAccountancy($obj->{'accountancy'})
         ,Rewrite::fromCacotrophic($obj->{'cacotrophic'})
@@ -12622,6 +13033,66 @@ class Santir {
      * @throws Exception
      */
     public static function from(stdClass $obj): Santir {
+        if (!property_exists($obj, 'admiredly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'demicaponier')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'epitympanic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'investitor')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lupiform')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'monoflagellate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'paleoethnic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'prediscountable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rhetoricals')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'roomth')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'saccharose')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'septonasal')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'serpenticide')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'setarious')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'spaework')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stylite')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Suessiones')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'timelily')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unprofaned')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'vorticular')) {
+            throw new Exception("Missing required property");
+        }
         return new Santir(
          Santir::fromAdmiredly($obj->{'admiredly'})
         ,Santir::fromDemicaponier($obj->{'demicaponier'})
@@ -15303,6 +15774,66 @@ class Scatty {
      * @throws Exception
      */
     public static function from(stdClass $obj): Scatty {
+        if (!property_exists($obj, 'aeriferous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'antical')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'antighostism')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'arcanum')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'autotrophy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'baronial')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'caffeine')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gorgoniacean')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'heroical')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hydropical')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mechanology')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'musicopoetic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'officiality')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'oftentimes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ophthalmotonometer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'reflectively')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'springer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Tabasco')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'teleianthous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uncombated')) {
+            throw new Exception("Missing required property");
+        }
         return new Scatty(
          Scatty::fromAeriferous($obj->{'aeriferous'})
         ,Scatty::fromAntical($obj->{'antical'})
@@ -16487,6 +17018,66 @@ class Sistering {
      * @throws Exception
      */
     public static function from(stdClass $obj): Sistering {
+        if (!property_exists($obj, 'amphicarpic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Chianti')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'frigorific')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Haplomi')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hyperkinesis')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'laudable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'madwoman')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'maimedly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Micropterygidae')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'microrhabdus')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nondense')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'phlebemphraxis')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'redsear')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'schismatical')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tartryl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unabhorred')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'undeliberateness')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unmixable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'untruckling')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'vineal')) {
+            throw new Exception("Missing required property");
+        }
         return new Sistering(
          Sistering::fromAmphicarpic($obj->{'amphicarpic'})
         ,Sistering::fromChianti($obj->{'Chianti'})
@@ -24079,6 +24670,66 @@ class Unstressed {
      * @throws Exception
      */
     public static function from(stdClass $obj): Unstressed {
+        if (!property_exists($obj, 'Alain')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Amphirhina')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'antimachinery')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'coldish')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'crantara')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'distinguishing')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'elytroposis')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gentianwort')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'heliosis')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'instrumental')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'introinflection')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kala')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Lincolnian')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'metad')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Sarcophilus')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'swingingly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unconformity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'undecreed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'venerable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'vowellessness')) {
+            throw new Exception("Missing required property");
+        }
         return new Unstressed(
          Unstressed::fromAlain($obj->{'Alain'})
         ,Unstressed::fromAmphirhina($obj->{'Amphirhina'})
@@ -25263,6 +25914,66 @@ class Wrothy {
      * @throws Exception
      */
     public static function from(stdClass $obj): Wrothy {
+        if (!property_exists($obj, 'Aeschynanthus')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'aquiferous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cheapener')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'enumeration')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Ephesine')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'escadrille')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'estrous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'interestedly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'katakinetomer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mortification')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'morula')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'orthosymmetrical')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'overbark')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'politist')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'qualified')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sphenomalar')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'throatful')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'transhumance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'triandrian')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unbooked')) {
+            throw new Exception("Missing required property");
+        }
         return new Wrothy(
          Wrothy::fromAeschynanthus($obj->{'Aeschynanthus'})
         ,Wrothy::fromAquiferous($obj->{'aquiferous'})
diff --git a/base/php/test/inputs/json/priority/combined-enum.json/default/TopLevel.php b/head/php/test/inputs/json/priority/combined-enum.json/default/TopLevel.php
index f2cb3c4..d4e6bea 100644
--- a/base/php/test/inputs/json/priority/combined-enum.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/combined-enum.json/default/TopLevel.php
@@ -160,6 +160,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'bar')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBar($obj->{'bar'})
         ,TopLevel::fromFoo($obj->{'foo'})
@@ -261,6 +267,9 @@ class Bar {
      * @throws Exception
      */
     public static function from(stdClass $obj): Bar {
+        if (!property_exists($obj, 'x')) {
+            throw new Exception("Missing required property");
+        }
         return new Bar(
          Bar::fromX($obj->{'x'})
         );
diff --git a/base/php/test/inputs/json/priority/direct-recursive.json/default/TopLevel.php b/head/php/test/inputs/json/priority/direct-recursive.json/default/TopLevel.php
index da8b87d..260c712 100644
--- a/base/php/test/inputs/json/priority/direct-recursive.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/direct-recursive.json/default/TopLevel.php
@@ -303,6 +303,18 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'bar')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'moo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'quux')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromAlso($obj->{'also'})
         ,TopLevel::fromBar($obj->{'bar'})
diff --git a/base/php/test/inputs/json/priority/empty-enum.json/default/TopLevel.php b/head/php/test/inputs/json/priority/empty-enum.json/default/TopLevel.php
index 941c33f..53aa74b 100644
--- a/base/php/test/inputs/json/priority/empty-enum.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/empty-enum.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromFoo($obj->{'foo'})
         );
diff --git a/base/php/test/inputs/json/priority/identifiers.json/default/TopLevel.php b/head/php/test/inputs/json/priority/identifiers.json/default/TopLevel.php
index b4440dc..03235fd 100644
--- a/base/php/test/inputs/json/priority/identifiers.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/identifiers.json/default/TopLevel.php
@@ -349,6 +349,24 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'bla')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ThisIsA😜Tough"' . "\n" . '' . "\n" . 'One')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '!')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Empty')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBla($obj->{'bla'})
         ,TopLevel::fromEmpty($obj->{''})
@@ -457,6 +475,9 @@ class TopLevelBla {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevelBla {
+        if (!property_exists($obj, 'bar')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevelBla(
          TopLevelBla::fromBar($obj->{'bar'})
         );
@@ -555,6 +576,9 @@ class TopLevelClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevelClass {
+        if (!property_exists($obj, 'x')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevelClass(
          TopLevelClass::fromX($obj->{'x'})
         );
@@ -758,6 +782,15 @@ class Foo {
      * @throws Exception
      */
     public static function from(stdClass $obj): Foo {
+        if (!property_exists($obj, 'bla')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '_')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '__')) {
+            throw new Exception("Missing required property");
+        }
         return new Foo(
          Foo::fromBla($obj->{'bla'})
         ,Foo::fromEmpty($obj->{'_'})
@@ -957,6 +990,12 @@ class ThisIsAToughOne {
      * @throws Exception
      */
     public static function from(stdClass $obj): ThisIsAToughOne {
+        if (!property_exists($obj, '' . "\n" . '' . "\n" . '' . "\n" . '')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '"')) {
+            throw new Exception("Missing required property");
+        }
         return new ThisIsAToughOne(
          ThisIsAToughOne::fromEmpty($obj->{'' . "\n" . '' . "\n" . '' . "\n" . ''})
         ,ThisIsAToughOne::fromThisIsAToughOne($obj->{'"'})
@@ -1057,6 +1096,9 @@ class EmptyClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): EmptyClass {
+        if (!property_exists($obj, 'y')) {
+            throw new Exception("Missing required property");
+        }
         return new EmptyClass(
          EmptyClass::fromY($obj->{'y'})
         );
diff --git a/base/php/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.php b/head/php/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.php
index 88bf4a2..f6901ce 100644
--- a/base/php/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/issue2680-object-array.json/default/TopLevel.php
@@ -84,6 +84,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'key')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromKey($obj->{'key'})
         );
diff --git a/base/php/test/inputs/json/priority/keywords.json/default/TopLevel.php b/head/php/test/inputs/json/priority/keywords.json/default/TopLevel.php
index fae0234..4fbc2b0 100644
--- a/base/php/test/inputs/json/priority/keywords.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/keywords.json/default/TopLevel.php
@@ -349,6 +349,24 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'dummy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'obj1')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'obj2')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'obj3')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'obj4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'obj5')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromDummy($obj->{'dummy'})
         ,TopLevel::fromObj1($obj->{'obj1'})
@@ -3902,6 +3920,204 @@ class Obj1 {
      * @throws Exception
      */
     public static function from(stdClass $obj): Obj1 {
+        if (!property_exists($obj, 'abstract')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'alignas')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'alignof')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'and')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'and_eq')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Any')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'array')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'as')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'asm')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'assert')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'associatedtype')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'associativity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'async')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'atomic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'atomic_cancel')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'atomic_commit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'atomic_noexcept')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'auto')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'await')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'base')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bitand')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bitor')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'BOOL')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'boolean')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'break')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bycopy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'byref')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'byte')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'case')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'catch')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'chan')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'char')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'char16_t')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'char32_t')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'checked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'clone')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'co_await')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'co_return')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'co_yield')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'compl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '_Complex')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'concept')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'console')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'const')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'const_cast')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'constexpr')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'constructor')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'continue')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'convenience')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'convert')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'converter')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date_parse_handling')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'debugger')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'decimal')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'declare')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'decltype')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'decode_string')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'dummy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '_')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '_Imaginery')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'any')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '_Bool')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bool')) {
+            throw new Exception("Missing required property");
+        }
         return new Obj1(
          Obj1::fromAbstract($obj->{'abstract'})
         ,Obj1::fromAlignas($obj->{'alignas'})
@@ -4130,6 +4346,9 @@ class AbstractClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): AbstractClass {
+        if (!property_exists($obj, 'abstract')) {
+            throw new Exception("Missing required property");
+        }
         return new AbstractClass(
          AbstractClass::fromAbstract($obj->{'abstract'})
         );
@@ -4228,6 +4447,9 @@ class Alignas {
      * @throws Exception
      */
     public static function from(stdClass $obj): Alignas {
+        if (!property_exists($obj, 'alignas')) {
+            throw new Exception("Missing required property");
+        }
         return new Alignas(
          Alignas::fromAlignas($obj->{'alignas'})
         );
@@ -4326,6 +4548,9 @@ class Alignof {
      * @throws Exception
      */
     public static function from(stdClass $obj): Alignof {
+        if (!property_exists($obj, 'alignof')) {
+            throw new Exception("Missing required property");
+        }
         return new Alignof(
          Alignof::fromAlignof($obj->{'alignof'})
         );
@@ -4424,6 +4649,9 @@ class AndClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): AndClass {
+        if (!property_exists($obj, 'and')) {
+            throw new Exception("Missing required property");
+        }
         return new AndClass(
          AndClass::fromAnd($obj->{'and'})
         );
@@ -4522,6 +4750,9 @@ class AndEq {
      * @throws Exception
      */
     public static function from(stdClass $obj): AndEq {
+        if (!property_exists($obj, 'and_eq')) {
+            throw new Exception("Missing required property");
+        }
         return new AndEq(
          AndEq::fromAndEq($obj->{'and_eq'})
         );
@@ -4620,6 +4851,9 @@ class Any {
      * @throws Exception
      */
     public static function from(stdClass $obj): Any {
+        if (!property_exists($obj, 'Any')) {
+            throw new Exception("Missing required property");
+        }
         return new Any(
          Any::fromAny($obj->{'Any'})
         );
@@ -4718,6 +4952,9 @@ class ArrayClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ArrayClass {
+        if (!property_exists($obj, 'array')) {
+            throw new Exception("Missing required property");
+        }
         return new ArrayClass(
          ArrayClass::fromArray($obj->{'array'})
         );
@@ -4816,6 +5053,9 @@ class AsClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): AsClass {
+        if (!property_exists($obj, 'as')) {
+            throw new Exception("Missing required property");
+        }
         return new AsClass(
          AsClass::fromAs($obj->{'as'})
         );
@@ -4914,6 +5154,9 @@ class ASM {
      * @throws Exception
      */
     public static function from(stdClass $obj): ASM {
+        if (!property_exists($obj, 'asm')) {
+            throw new Exception("Missing required property");
+        }
         return new ASM(
          ASM::fromASM($obj->{'asm'})
         );
@@ -5012,6 +5255,9 @@ class Assert {
      * @throws Exception
      */
     public static function from(stdClass $obj): Assert {
+        if (!property_exists($obj, 'assert')) {
+            throw new Exception("Missing required property");
+        }
         return new Assert(
          Assert::fromAssert($obj->{'assert'})
         );
@@ -5110,6 +5356,9 @@ class Associatedtype {
      * @throws Exception
      */
     public static function from(stdClass $obj): Associatedtype {
+        if (!property_exists($obj, 'associatedtype')) {
+            throw new Exception("Missing required property");
+        }
         return new Associatedtype(
          Associatedtype::fromAssociatedtype($obj->{'associatedtype'})
         );
@@ -5208,6 +5457,9 @@ class Associativity {
      * @throws Exception
      */
     public static function from(stdClass $obj): Associativity {
+        if (!property_exists($obj, 'associativity')) {
+            throw new Exception("Missing required property");
+        }
         return new Associativity(
          Associativity::fromAssociativity($obj->{'associativity'})
         );
@@ -5306,6 +5558,9 @@ class Async {
      * @throws Exception
      */
     public static function from(stdClass $obj): Async {
+        if (!property_exists($obj, 'async')) {
+            throw new Exception("Missing required property");
+        }
         return new Async(
          Async::fromAsync($obj->{'async'})
         );
@@ -5404,6 +5659,9 @@ class Atomic {
      * @throws Exception
      */
     public static function from(stdClass $obj): Atomic {
+        if (!property_exists($obj, 'atomic')) {
+            throw new Exception("Missing required property");
+        }
         return new Atomic(
          Atomic::fromAtomic($obj->{'atomic'})
         );
@@ -5502,6 +5760,9 @@ class AtomicCancel {
      * @throws Exception
      */
     public static function from(stdClass $obj): AtomicCancel {
+        if (!property_exists($obj, 'atomic_cancel')) {
+            throw new Exception("Missing required property");
+        }
         return new AtomicCancel(
          AtomicCancel::fromAtomicCancel($obj->{'atomic_cancel'})
         );
@@ -5600,6 +5861,9 @@ class AtomicCommit {
      * @throws Exception
      */
     public static function from(stdClass $obj): AtomicCommit {
+        if (!property_exists($obj, 'atomic_commit')) {
+            throw new Exception("Missing required property");
+        }
         return new AtomicCommit(
          AtomicCommit::fromAtomicCommit($obj->{'atomic_commit'})
         );
@@ -5698,6 +5962,9 @@ class AtomicNoexcept {
      * @throws Exception
      */
     public static function from(stdClass $obj): AtomicNoexcept {
+        if (!property_exists($obj, 'atomic_noexcept')) {
+            throw new Exception("Missing required property");
+        }
         return new AtomicNoexcept(
          AtomicNoexcept::fromAtomicNoexcept($obj->{'atomic_noexcept'})
         );
@@ -5796,6 +6063,9 @@ class Auto {
      * @throws Exception
      */
     public static function from(stdClass $obj): Auto {
+        if (!property_exists($obj, 'auto')) {
+            throw new Exception("Missing required property");
+        }
         return new Auto(
          Auto::fromAuto($obj->{'auto'})
         );
@@ -5894,6 +6164,9 @@ class Await {
      * @throws Exception
      */
     public static function from(stdClass $obj): Await {
+        if (!property_exists($obj, 'await')) {
+            throw new Exception("Missing required property");
+        }
         return new Await(
          Await::fromAwait($obj->{'await'})
         );
@@ -5992,6 +6265,9 @@ class Base {
      * @throws Exception
      */
     public static function from(stdClass $obj): Base {
+        if (!property_exists($obj, 'base')) {
+            throw new Exception("Missing required property");
+        }
         return new Base(
          Base::fromBase($obj->{'base'})
         );
@@ -6090,6 +6366,9 @@ class Bitand {
      * @throws Exception
      */
     public static function from(stdClass $obj): Bitand {
+        if (!property_exists($obj, 'bitand')) {
+            throw new Exception("Missing required property");
+        }
         return new Bitand(
          Bitand::fromBitand($obj->{'bitand'})
         );
@@ -6188,6 +6467,9 @@ class Bitor {
      * @throws Exception
      */
     public static function from(stdClass $obj): Bitor {
+        if (!property_exists($obj, 'bitor')) {
+            throw new Exception("Missing required property");
+        }
         return new Bitor(
          Bitor::fromBitor($obj->{'bitor'})
         );
@@ -6286,6 +6568,9 @@ class BOOLClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): BOOLClass {
+        if (!property_exists($obj, 'BOOL')) {
+            throw new Exception("Missing required property");
+        }
         return new BOOLClass(
          BOOLClass::fromBool($obj->{'BOOL'})
         );
@@ -6384,6 +6669,9 @@ class Boolean {
      * @throws Exception
      */
     public static function from(stdClass $obj): Boolean {
+        if (!property_exists($obj, 'boolean')) {
+            throw new Exception("Missing required property");
+        }
         return new Boolean(
          Boolean::fromBoolean($obj->{'boolean'})
         );
@@ -6482,6 +6770,9 @@ class BreakClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): BreakClass {
+        if (!property_exists($obj, 'break')) {
+            throw new Exception("Missing required property");
+        }
         return new BreakClass(
          BreakClass::fromBreak($obj->{'break'})
         );
@@ -6580,6 +6871,9 @@ class Bycopy {
      * @throws Exception
      */
     public static function from(stdClass $obj): Bycopy {
+        if (!property_exists($obj, 'bycopy')) {
+            throw new Exception("Missing required property");
+        }
         return new Bycopy(
          Bycopy::fromBycopy($obj->{'bycopy'})
         );
@@ -6678,6 +6972,9 @@ class Byref {
      * @throws Exception
      */
     public static function from(stdClass $obj): Byref {
+        if (!property_exists($obj, 'byref')) {
+            throw new Exception("Missing required property");
+        }
         return new Byref(
          Byref::fromByref($obj->{'byref'})
         );
@@ -6776,6 +7073,9 @@ class Byte {
      * @throws Exception
      */
     public static function from(stdClass $obj): Byte {
+        if (!property_exists($obj, 'byte')) {
+            throw new Exception("Missing required property");
+        }
         return new Byte(
          Byte::fromByte($obj->{'byte'})
         );
@@ -6874,6 +7174,9 @@ class CaseClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): CaseClass {
+        if (!property_exists($obj, 'case')) {
+            throw new Exception("Missing required property");
+        }
         return new CaseClass(
          CaseClass::fromCase($obj->{'case'})
         );
@@ -6972,6 +7275,9 @@ class CatchClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): CatchClass {
+        if (!property_exists($obj, 'catch')) {
+            throw new Exception("Missing required property");
+        }
         return new CatchClass(
          CatchClass::fromCatch($obj->{'catch'})
         );
@@ -7070,6 +7376,9 @@ class Chan {
      * @throws Exception
      */
     public static function from(stdClass $obj): Chan {
+        if (!property_exists($obj, 'chan')) {
+            throw new Exception("Missing required property");
+        }
         return new Chan(
          Chan::fromChan($obj->{'chan'})
         );
@@ -7168,6 +7477,9 @@ class Char {
      * @throws Exception
      */
     public static function from(stdClass $obj): Char {
+        if (!property_exists($obj, 'char')) {
+            throw new Exception("Missing required property");
+        }
         return new Char(
          Char::fromChar($obj->{'char'})
         );
@@ -7266,6 +7578,9 @@ class Char16T {
      * @throws Exception
      */
     public static function from(stdClass $obj): Char16T {
+        if (!property_exists($obj, 'char16_t')) {
+            throw new Exception("Missing required property");
+        }
         return new Char16T(
          Char16T::fromChar16T($obj->{'char16_t'})
         );
@@ -7364,6 +7679,9 @@ class Char32T {
      * @throws Exception
      */
     public static function from(stdClass $obj): Char32T {
+        if (!property_exists($obj, 'char32_t')) {
+            throw new Exception("Missing required property");
+        }
         return new Char32T(
          Char32T::fromChar32T($obj->{'char32_t'})
         );
@@ -7462,6 +7780,9 @@ class Checked {
      * @throws Exception
      */
     public static function from(stdClass $obj): Checked {
+        if (!property_exists($obj, 'checked')) {
+            throw new Exception("Missing required property");
+        }
         return new Checked(
          Checked::fromChecked($obj->{'checked'})
         );
@@ -7560,6 +7881,9 @@ class ClassClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ClassClass {
+        if (!property_exists($obj, 'Class')) {
+            throw new Exception("Missing required property");
+        }
         return new ClassClass(
          ClassClass::fromClass($obj->{'Class'})
         );
@@ -7658,6 +7982,9 @@ class CloneClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): CloneClass {
+        if (!property_exists($obj, 'clone')) {
+            throw new Exception("Missing required property");
+        }
         return new CloneClass(
          CloneClass::fromClone($obj->{'clone'})
         );
@@ -7756,6 +8083,9 @@ class CoAwait {
      * @throws Exception
      */
     public static function from(stdClass $obj): CoAwait {
+        if (!property_exists($obj, 'co_await')) {
+            throw new Exception("Missing required property");
+        }
         return new CoAwait(
          CoAwait::fromCoAwait($obj->{'co_await'})
         );
@@ -7854,6 +8184,9 @@ class CoReturn {
      * @throws Exception
      */
     public static function from(stdClass $obj): CoReturn {
+        if (!property_exists($obj, 'co_return')) {
+            throw new Exception("Missing required property");
+        }
         return new CoReturn(
          CoReturn::fromCoReturn($obj->{'co_return'})
         );
@@ -7952,6 +8285,9 @@ class CoYield {
      * @throws Exception
      */
     public static function from(stdClass $obj): CoYield {
+        if (!property_exists($obj, 'co_yield')) {
+            throw new Exception("Missing required property");
+        }
         return new CoYield(
          CoYield::fromCoYield($obj->{'co_yield'})
         );
@@ -8050,6 +8386,9 @@ class Compl {
      * @throws Exception
      */
     public static function from(stdClass $obj): Compl {
+        if (!property_exists($obj, 'compl')) {
+            throw new Exception("Missing required property");
+        }
         return new Compl(
          Compl::fromCompl($obj->{'compl'})
         );
@@ -8148,6 +8487,9 @@ class Complex {
      * @throws Exception
      */
     public static function from(stdClass $obj): Complex {
+        if (!property_exists($obj, '_Complex')) {
+            throw new Exception("Missing required property");
+        }
         return new Complex(
          Complex::fromComplex($obj->{'_Complex'})
         );
@@ -8246,6 +8588,9 @@ class Concept {
      * @throws Exception
      */
     public static function from(stdClass $obj): Concept {
+        if (!property_exists($obj, 'concept')) {
+            throw new Exception("Missing required property");
+        }
         return new Concept(
          Concept::fromConcept($obj->{'concept'})
         );
@@ -8344,6 +8689,9 @@ class Console {
      * @throws Exception
      */
     public static function from(stdClass $obj): Console {
+        if (!property_exists($obj, 'console')) {
+            throw new Exception("Missing required property");
+        }
         return new Console(
          Console::fromConsole($obj->{'console'})
         );
@@ -8442,6 +8790,9 @@ class ConstClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ConstClass {
+        if (!property_exists($obj, 'const')) {
+            throw new Exception("Missing required property");
+        }
         return new ConstClass(
          ConstClass::fromConst($obj->{'const'})
         );
@@ -8540,6 +8891,9 @@ class ConstCast {
      * @throws Exception
      */
     public static function from(stdClass $obj): ConstCast {
+        if (!property_exists($obj, 'const_cast')) {
+            throw new Exception("Missing required property");
+        }
         return new ConstCast(
          ConstCast::fromConstCast($obj->{'const_cast'})
         );
@@ -8638,6 +8992,9 @@ class Constexpr {
      * @throws Exception
      */
     public static function from(stdClass $obj): Constexpr {
+        if (!property_exists($obj, 'constexpr')) {
+            throw new Exception("Missing required property");
+        }
         return new Constexpr(
          Constexpr::fromConstexpr($obj->{'constexpr'})
         );
@@ -8736,6 +9093,9 @@ class Constructor {
      * @throws Exception
      */
     public static function from(stdClass $obj): Constructor {
+        if (!property_exists($obj, 'constructor')) {
+            throw new Exception("Missing required property");
+        }
         return new Constructor(
          Constructor::fromConstructor($obj->{'constructor'})
         );
@@ -8834,6 +9194,9 @@ class ContinueClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ContinueClass {
+        if (!property_exists($obj, 'continue')) {
+            throw new Exception("Missing required property");
+        }
         return new ContinueClass(
          ContinueClass::fromContinue($obj->{'continue'})
         );
@@ -8932,6 +9295,9 @@ class Convenience {
      * @throws Exception
      */
     public static function from(stdClass $obj): Convenience {
+        if (!property_exists($obj, 'convenience')) {
+            throw new Exception("Missing required property");
+        }
         return new Convenience(
          Convenience::fromConvenience($obj->{'convenience'})
         );
@@ -9030,6 +9396,9 @@ class Convert {
      * @throws Exception
      */
     public static function from(stdClass $obj): Convert {
+        if (!property_exists($obj, 'convert')) {
+            throw new Exception("Missing required property");
+        }
         return new Convert(
          Convert::fromConvert($obj->{'convert'})
         );
@@ -9128,6 +9497,9 @@ class ConverterClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ConverterClass {
+        if (!property_exists($obj, 'converter')) {
+            throw new Exception("Missing required property");
+        }
         return new ConverterClass(
          ConverterClass::fromConverter($obj->{'converter'})
         );
@@ -9226,6 +9598,9 @@ class Date {
      * @throws Exception
      */
     public static function from(stdClass $obj): Date {
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
         return new Date(
          Date::fromDate($obj->{'date'})
         );
@@ -9324,6 +9699,9 @@ class DateParseHandling {
      * @throws Exception
      */
     public static function from(stdClass $obj): DateParseHandling {
+        if (!property_exists($obj, 'date_parse_handling')) {
+            throw new Exception("Missing required property");
+        }
         return new DateParseHandling(
          DateParseHandling::fromDateParseHandling($obj->{'date_parse_handling'})
         );
@@ -9422,6 +9800,9 @@ class Debugger {
      * @throws Exception
      */
     public static function from(stdClass $obj): Debugger {
+        if (!property_exists($obj, 'debugger')) {
+            throw new Exception("Missing required property");
+        }
         return new Debugger(
          Debugger::fromDebugger($obj->{'debugger'})
         );
@@ -9520,6 +9901,9 @@ class Decimal {
      * @throws Exception
      */
     public static function from(stdClass $obj): Decimal {
+        if (!property_exists($obj, 'decimal')) {
+            throw new Exception("Missing required property");
+        }
         return new Decimal(
          Decimal::fromDecimal($obj->{'decimal'})
         );
@@ -9618,6 +10002,9 @@ class DeclareClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): DeclareClass {
+        if (!property_exists($obj, 'declare')) {
+            throw new Exception("Missing required property");
+        }
         return new DeclareClass(
          DeclareClass::fromDeclare($obj->{'declare'})
         );
@@ -9716,6 +10103,9 @@ class Decltype {
      * @throws Exception
      */
     public static function from(stdClass $obj): Decltype {
+        if (!property_exists($obj, 'decltype')) {
+            throw new Exception("Missing required property");
+        }
         return new Decltype(
          Decltype::fromDecltype($obj->{'decltype'})
         );
@@ -9814,6 +10204,9 @@ class DecodeString {
      * @throws Exception
      */
     public static function from(stdClass $obj): DecodeString {
+        if (!property_exists($obj, 'decode_string')) {
+            throw new Exception("Missing required property");
+        }
         return new DecodeString(
          DecodeString::fromDecodeString($obj->{'decode_string'})
         );
@@ -9912,6 +10305,9 @@ class Purple {
      * @throws Exception
      */
     public static function from(stdClass $obj): Purple {
+        if (!property_exists($obj, '_')) {
+            throw new Exception("Missing required property");
+        }
         return new Purple(
          Purple::fromEmpty($obj->{'_'})
         );
@@ -10010,6 +10406,9 @@ class Imaginery {
      * @throws Exception
      */
     public static function from(stdClass $obj): Imaginery {
+        if (!property_exists($obj, '_Imaginery')) {
+            throw new Exception("Missing required property");
+        }
         return new Imaginery(
          Imaginery::fromImaginery($obj->{'_Imaginery'})
         );
@@ -10108,6 +10507,9 @@ class AnyClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): AnyClass {
+        if (!property_exists($obj, 'any')) {
+            throw new Exception("Missing required property");
+        }
         return new AnyClass(
          AnyClass::fromAny($obj->{'any'})
         );
@@ -10206,6 +10608,9 @@ class Obj1Bool {
      * @throws Exception
      */
     public static function from(stdClass $obj): Obj1Bool {
+        if (!property_exists($obj, '_Bool')) {
+            throw new Exception("Missing required property");
+        }
         return new Obj1Bool(
          Obj1Bool::fromBool($obj->{'_Bool'})
         );
@@ -10304,6 +10709,9 @@ class Obj1Class {
      * @throws Exception
      */
     public static function from(stdClass $obj): Obj1Class {
+        if (!property_exists($obj, 'class')) {
+            throw new Exception("Missing required property");
+        }
         return new Obj1Class(
          Obj1Class::fromClass($obj->{'class'})
         );
@@ -10402,6 +10810,9 @@ class Obj1BoolClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): Obj1BoolClass {
+        if (!property_exists($obj, 'bool')) {
+            throw new Exception("Missing required property");
+        }
         return new Obj1BoolClass(
          Obj1BoolClass::fromBool($obj->{'bool'})
         );
@@ -13945,6 +14356,204 @@ class Obj2 {
      * @throws Exception
      */
     public static function from(stdClass $obj): Obj2 {
+        if (!property_exists($obj, 'def')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'default')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'defer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'deinit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'del')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'delegate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'delete')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'dict')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'dictionary')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'didSet')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'do')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'double')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'dummy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'dynamic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'dynamic_cast')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'elif')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'else')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'encode_quick_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'enum')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'equalityContract')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'event')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'except')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'exception')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'explicit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'export')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'exposing')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'extends')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'extension')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'extern')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fallthrough')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'False')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fileprivate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'final')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'finally')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fixed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'float')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'for')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'foreach')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'friend')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'from')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'from_json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'func')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'function')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'get')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'global')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'go')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'goto')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'guard')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hasOwnProperty')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'if')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'IMP')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'implements')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'implicit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'import')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'in')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'indirect')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'infix')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'init')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'inline')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'inout')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'instanceof')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'int')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'interface')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'internal')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'false')) {
+            throw new Exception("Missing required property");
+        }
         return new Obj2(
          Obj2::fromDef($obj->{'def'})
         ,Obj2::fromDefault($obj->{'default'})
@@ -14173,6 +14782,9 @@ class Def {
      * @throws Exception
      */
     public static function from(stdClass $obj): Def {
+        if (!property_exists($obj, 'def')) {
+            throw new Exception("Missing required property");
+        }
         return new Def(
          Def::fromDef($obj->{'def'})
         );
@@ -14271,6 +14883,9 @@ class DefaultClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): DefaultClass {
+        if (!property_exists($obj, 'default')) {
+            throw new Exception("Missing required property");
+        }
         return new DefaultClass(
          DefaultClass::fromDefault($obj->{'default'})
         );
@@ -14369,6 +14984,9 @@ class Defer {
      * @throws Exception
      */
     public static function from(stdClass $obj): Defer {
+        if (!property_exists($obj, 'defer')) {
+            throw new Exception("Missing required property");
+        }
         return new Defer(
          Defer::fromDefer($obj->{'defer'})
         );
@@ -14467,6 +15085,9 @@ class Deinit {
      * @throws Exception
      */
     public static function from(stdClass $obj): Deinit {
+        if (!property_exists($obj, 'deinit')) {
+            throw new Exception("Missing required property");
+        }
         return new Deinit(
          Deinit::fromDeinit($obj->{'deinit'})
         );
@@ -14565,6 +15186,9 @@ class Del {
      * @throws Exception
      */
     public static function from(stdClass $obj): Del {
+        if (!property_exists($obj, 'del')) {
+            throw new Exception("Missing required property");
+        }
         return new Del(
          Del::fromDel($obj->{'del'})
         );
@@ -14663,6 +15287,9 @@ class Delegate {
      * @throws Exception
      */
     public static function from(stdClass $obj): Delegate {
+        if (!property_exists($obj, 'delegate')) {
+            throw new Exception("Missing required property");
+        }
         return new Delegate(
          Delegate::fromDelegate($obj->{'delegate'})
         );
@@ -14761,6 +15388,9 @@ class Delete {
      * @throws Exception
      */
     public static function from(stdClass $obj): Delete {
+        if (!property_exists($obj, 'delete')) {
+            throw new Exception("Missing required property");
+        }
         return new Delete(
          Delete::fromDelete($obj->{'delete'})
         );
@@ -14859,6 +15489,9 @@ class Dict {
      * @throws Exception
      */
     public static function from(stdClass $obj): Dict {
+        if (!property_exists($obj, 'dict')) {
+            throw new Exception("Missing required property");
+        }
         return new Dict(
          Dict::fromDict($obj->{'dict'})
         );
@@ -14957,6 +15590,9 @@ class Dictionary {
      * @throws Exception
      */
     public static function from(stdClass $obj): Dictionary {
+        if (!property_exists($obj, 'dictionary')) {
+            throw new Exception("Missing required property");
+        }
         return new Dictionary(
          Dictionary::fromDictionary($obj->{'dictionary'})
         );
@@ -15055,6 +15691,9 @@ class DidSet {
      * @throws Exception
      */
     public static function from(stdClass $obj): DidSet {
+        if (!property_exists($obj, 'didSet')) {
+            throw new Exception("Missing required property");
+        }
         return new DidSet(
          DidSet::fromDidSet($obj->{'didSet'})
         );
@@ -15153,6 +15792,9 @@ class DoClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): DoClass {
+        if (!property_exists($obj, 'do')) {
+            throw new Exception("Missing required property");
+        }
         return new DoClass(
          DoClass::fromDo($obj->{'do'})
         );
@@ -15251,6 +15893,9 @@ class Double {
      * @throws Exception
      */
     public static function from(stdClass $obj): Double {
+        if (!property_exists($obj, 'double')) {
+            throw new Exception("Missing required property");
+        }
         return new Double(
          Double::fromDouble($obj->{'double'})
         );
@@ -15349,6 +15994,9 @@ class Dynamic {
      * @throws Exception
      */
     public static function from(stdClass $obj): Dynamic {
+        if (!property_exists($obj, 'dynamic')) {
+            throw new Exception("Missing required property");
+        }
         return new Dynamic(
          Dynamic::fromDynamic($obj->{'dynamic'})
         );
@@ -15447,6 +16095,9 @@ class DynamicCast {
      * @throws Exception
      */
     public static function from(stdClass $obj): DynamicCast {
+        if (!property_exists($obj, 'dynamic_cast')) {
+            throw new Exception("Missing required property");
+        }
         return new DynamicCast(
          DynamicCast::fromDynamicCast($obj->{'dynamic_cast'})
         );
@@ -15545,6 +16196,9 @@ class Elif {
      * @throws Exception
      */
     public static function from(stdClass $obj): Elif {
+        if (!property_exists($obj, 'elif')) {
+            throw new Exception("Missing required property");
+        }
         return new Elif(
          Elif::fromElif($obj->{'elif'})
         );
@@ -15643,6 +16297,9 @@ class ElseClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ElseClass {
+        if (!property_exists($obj, 'else')) {
+            throw new Exception("Missing required property");
+        }
         return new ElseClass(
          ElseClass::fromElse($obj->{'else'})
         );
@@ -15741,6 +16398,9 @@ class EncodeQuickType {
      * @throws Exception
      */
     public static function from(stdClass $obj): EncodeQuickType {
+        if (!property_exists($obj, 'encode_quick_type')) {
+            throw new Exception("Missing required property");
+        }
         return new EncodeQuickType(
          EncodeQuickType::fromEncodeQuickType($obj->{'encode_quick_type'})
         );
@@ -15839,6 +16499,9 @@ class EnumClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): EnumClass {
+        if (!property_exists($obj, 'enum')) {
+            throw new Exception("Missing required property");
+        }
         return new EnumClass(
          EnumClass::fromEnum($obj->{'enum'})
         );
@@ -15937,6 +16600,9 @@ class EqualityContract {
      * @throws Exception
      */
     public static function from(stdClass $obj): EqualityContract {
+        if (!property_exists($obj, 'equalityContract')) {
+            throw new Exception("Missing required property");
+        }
         return new EqualityContract(
          EqualityContract::fromEqualityContract($obj->{'equalityContract'})
         );
@@ -16035,6 +16701,9 @@ class Event {
      * @throws Exception
      */
     public static function from(stdClass $obj): Event {
+        if (!property_exists($obj, 'event')) {
+            throw new Exception("Missing required property");
+        }
         return new Event(
          Event::fromEvent($obj->{'event'})
         );
@@ -16133,6 +16802,9 @@ class Except {
      * @throws Exception
      */
     public static function from(stdClass $obj): Except {
+        if (!property_exists($obj, 'except')) {
+            throw new Exception("Missing required property");
+        }
         return new Except(
          Except::fromExcept($obj->{'except'})
         );
@@ -16231,6 +16903,9 @@ class ExceptionClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ExceptionClass {
+        if (!property_exists($obj, 'exception')) {
+            throw new Exception("Missing required property");
+        }
         return new ExceptionClass(
          ExceptionClass::fromException($obj->{'exception'})
         );
@@ -16329,6 +17004,9 @@ class Explicit {
      * @throws Exception
      */
     public static function from(stdClass $obj): Explicit {
+        if (!property_exists($obj, 'explicit')) {
+            throw new Exception("Missing required property");
+        }
         return new Explicit(
          Explicit::fromExplicit($obj->{'explicit'})
         );
@@ -16427,6 +17105,9 @@ class Export {
      * @throws Exception
      */
     public static function from(stdClass $obj): Export {
+        if (!property_exists($obj, 'export')) {
+            throw new Exception("Missing required property");
+        }
         return new Export(
          Export::fromExport($obj->{'export'})
         );
@@ -16525,6 +17206,9 @@ class Exposing {
      * @throws Exception
      */
     public static function from(stdClass $obj): Exposing {
+        if (!property_exists($obj, 'exposing')) {
+            throw new Exception("Missing required property");
+        }
         return new Exposing(
          Exposing::fromExposing($obj->{'exposing'})
         );
@@ -16623,6 +17307,9 @@ class ExtendsClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ExtendsClass {
+        if (!property_exists($obj, 'extends')) {
+            throw new Exception("Missing required property");
+        }
         return new ExtendsClass(
          ExtendsClass::fromExtends($obj->{'extends'})
         );
@@ -16721,6 +17408,9 @@ class Extension {
      * @throws Exception
      */
     public static function from(stdClass $obj): Extension {
+        if (!property_exists($obj, 'extension')) {
+            throw new Exception("Missing required property");
+        }
         return new Extension(
          Extension::fromExtension($obj->{'extension'})
         );
@@ -16819,6 +17509,9 @@ class Extern {
      * @throws Exception
      */
     public static function from(stdClass $obj): Extern {
+        if (!property_exists($obj, 'extern')) {
+            throw new Exception("Missing required property");
+        }
         return new Extern(
          Extern::fromExtern($obj->{'extern'})
         );
@@ -16917,6 +17610,9 @@ class Fallthrough {
      * @throws Exception
      */
     public static function from(stdClass $obj): Fallthrough {
+        if (!property_exists($obj, 'fallthrough')) {
+            throw new Exception("Missing required property");
+        }
         return new Fallthrough(
          Fallthrough::fromFallthrough($obj->{'fallthrough'})
         );
@@ -17015,6 +17711,9 @@ class FalseClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): FalseClass {
+        if (!property_exists($obj, 'False')) {
+            throw new Exception("Missing required property");
+        }
         return new FalseClass(
          FalseClass::fromFalse($obj->{'False'})
         );
@@ -17113,6 +17812,9 @@ class Fileprivate {
      * @throws Exception
      */
     public static function from(stdClass $obj): Fileprivate {
+        if (!property_exists($obj, 'fileprivate')) {
+            throw new Exception("Missing required property");
+        }
         return new Fileprivate(
          Fileprivate::fromFileprivate($obj->{'fileprivate'})
         );
@@ -17211,6 +17913,9 @@ class FinalClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): FinalClass {
+        if (!property_exists($obj, 'final')) {
+            throw new Exception("Missing required property");
+        }
         return new FinalClass(
          FinalClass::fromFinal($obj->{'final'})
         );
@@ -17309,6 +18014,9 @@ class FinallyClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): FinallyClass {
+        if (!property_exists($obj, 'finally')) {
+            throw new Exception("Missing required property");
+        }
         return new FinallyClass(
          FinallyClass::fromFinally($obj->{'finally'})
         );
@@ -17407,6 +18115,9 @@ class Fixed {
      * @throws Exception
      */
     public static function from(stdClass $obj): Fixed {
+        if (!property_exists($obj, 'fixed')) {
+            throw new Exception("Missing required property");
+        }
         return new Fixed(
          Fixed::fromFixed($obj->{'fixed'})
         );
@@ -17505,6 +18216,9 @@ class FloatClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): FloatClass {
+        if (!property_exists($obj, 'float')) {
+            throw new Exception("Missing required property");
+        }
         return new FloatClass(
          FloatClass::fromFloat($obj->{'float'})
         );
@@ -17603,6 +18317,9 @@ class ForClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ForClass {
+        if (!property_exists($obj, 'for')) {
+            throw new Exception("Missing required property");
+        }
         return new ForClass(
          ForClass::fromFor($obj->{'for'})
         );
@@ -17701,6 +18418,9 @@ class ForeachClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ForeachClass {
+        if (!property_exists($obj, 'foreach')) {
+            throw new Exception("Missing required property");
+        }
         return new ForeachClass(
          ForeachClass::fromForeach($obj->{'foreach'})
         );
@@ -17799,6 +18519,9 @@ class Friend {
      * @throws Exception
      */
     public static function from(stdClass $obj): Friend {
+        if (!property_exists($obj, 'friend')) {
+            throw new Exception("Missing required property");
+        }
         return new Friend(
          Friend::fromFriend($obj->{'friend'})
         );
@@ -17897,6 +18620,9 @@ class From {
      * @throws Exception
      */
     public static function from(stdClass $obj): From {
+        if (!property_exists($obj, 'from')) {
+            throw new Exception("Missing required property");
+        }
         return new From(
          From::fromFrom($obj->{'from'})
         );
@@ -17995,6 +18721,9 @@ class FromJSON {
      * @throws Exception
      */
     public static function from(stdClass $obj): FromJSON {
+        if (!property_exists($obj, 'from_json')) {
+            throw new Exception("Missing required property");
+        }
         return new FromJSON(
          FromJSON::fromFromJSON($obj->{'from_json'})
         );
@@ -18093,6 +18822,9 @@ class Func {
      * @throws Exception
      */
     public static function from(stdClass $obj): Func {
+        if (!property_exists($obj, 'func')) {
+            throw new Exception("Missing required property");
+        }
         return new Func(
          Func::fromFunc($obj->{'func'})
         );
@@ -18191,6 +18923,9 @@ class FunctionClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): FunctionClass {
+        if (!property_exists($obj, 'function')) {
+            throw new Exception("Missing required property");
+        }
         return new FunctionClass(
          FunctionClass::fromFunction($obj->{'function'})
         );
@@ -18289,6 +19024,9 @@ class Get {
      * @throws Exception
      */
     public static function from(stdClass $obj): Get {
+        if (!property_exists($obj, 'get')) {
+            throw new Exception("Missing required property");
+        }
         return new Get(
          Get::fromGet($obj->{'get'})
         );
@@ -18387,6 +19125,9 @@ class GlobalClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): GlobalClass {
+        if (!property_exists($obj, 'global')) {
+            throw new Exception("Missing required property");
+        }
         return new GlobalClass(
          GlobalClass::fromGlobal($obj->{'global'})
         );
@@ -18485,6 +19226,9 @@ class Go {
      * @throws Exception
      */
     public static function from(stdClass $obj): Go {
+        if (!property_exists($obj, 'go')) {
+            throw new Exception("Missing required property");
+        }
         return new Go(
          Go::fromGo($obj->{'go'})
         );
@@ -18583,6 +19327,9 @@ class GotoClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): GotoClass {
+        if (!property_exists($obj, 'goto')) {
+            throw new Exception("Missing required property");
+        }
         return new GotoClass(
          GotoClass::fromGoto($obj->{'goto'})
         );
@@ -18681,6 +19428,9 @@ class Guard {
      * @throws Exception
      */
     public static function from(stdClass $obj): Guard {
+        if (!property_exists($obj, 'guard')) {
+            throw new Exception("Missing required property");
+        }
         return new Guard(
          Guard::fromGuard($obj->{'guard'})
         );
@@ -18779,6 +19529,9 @@ class HasOwnProperty {
      * @throws Exception
      */
     public static function from(stdClass $obj): HasOwnProperty {
+        if (!property_exists($obj, 'hasOwnProperty')) {
+            throw new Exception("Missing required property");
+        }
         return new HasOwnProperty(
          HasOwnProperty::fromHasOwnProperty($obj->{'hasOwnProperty'})
         );
@@ -18877,6 +19630,9 @@ class ID {
      * @throws Exception
      */
     public static function from(stdClass $obj): ID {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
         return new ID(
          ID::fromID($obj->{'id'})
         );
@@ -18975,6 +19731,9 @@ class IfClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): IfClass {
+        if (!property_exists($obj, 'if')) {
+            throw new Exception("Missing required property");
+        }
         return new IfClass(
          IfClass::fromIf($obj->{'if'})
         );
@@ -19073,6 +19832,9 @@ class Imp {
      * @throws Exception
      */
     public static function from(stdClass $obj): Imp {
+        if (!property_exists($obj, 'IMP')) {
+            throw new Exception("Missing required property");
+        }
         return new Imp(
          Imp::fromImp($obj->{'IMP'})
         );
@@ -19171,6 +19933,9 @@ class ImplementsClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ImplementsClass {
+        if (!property_exists($obj, 'implements')) {
+            throw new Exception("Missing required property");
+        }
         return new ImplementsClass(
          ImplementsClass::fromImplements($obj->{'implements'})
         );
@@ -19269,6 +20034,9 @@ class Implicit {
      * @throws Exception
      */
     public static function from(stdClass $obj): Implicit {
+        if (!property_exists($obj, 'implicit')) {
+            throw new Exception("Missing required property");
+        }
         return new Implicit(
          Implicit::fromImplicit($obj->{'implicit'})
         );
@@ -19367,6 +20135,9 @@ class Import {
      * @throws Exception
      */
     public static function from(stdClass $obj): Import {
+        if (!property_exists($obj, 'import')) {
+            throw new Exception("Missing required property");
+        }
         return new Import(
          Import::fromImport($obj->{'import'})
         );
@@ -19465,6 +20236,9 @@ class In {
      * @throws Exception
      */
     public static function from(stdClass $obj): In {
+        if (!property_exists($obj, 'in')) {
+            throw new Exception("Missing required property");
+        }
         return new In(
          In::fromIn($obj->{'in'})
         );
@@ -19563,6 +20337,9 @@ class Indirect {
      * @throws Exception
      */
     public static function from(stdClass $obj): Indirect {
+        if (!property_exists($obj, 'indirect')) {
+            throw new Exception("Missing required property");
+        }
         return new Indirect(
          Indirect::fromIndirect($obj->{'indirect'})
         );
@@ -19661,6 +20438,9 @@ class Infix {
      * @throws Exception
      */
     public static function from(stdClass $obj): Infix {
+        if (!property_exists($obj, 'infix')) {
+            throw new Exception("Missing required property");
+        }
         return new Infix(
          Infix::fromInfix($obj->{'infix'})
         );
@@ -19759,6 +20539,9 @@ class Init {
      * @throws Exception
      */
     public static function from(stdClass $obj): Init {
+        if (!property_exists($obj, 'init')) {
+            throw new Exception("Missing required property");
+        }
         return new Init(
          Init::fromInit($obj->{'init'})
         );
@@ -19857,6 +20640,9 @@ class Inline {
      * @throws Exception
      */
     public static function from(stdClass $obj): Inline {
+        if (!property_exists($obj, 'inline')) {
+            throw new Exception("Missing required property");
+        }
         return new Inline(
          Inline::fromInline($obj->{'inline'})
         );
@@ -19955,6 +20741,9 @@ class Inout {
      * @throws Exception
      */
     public static function from(stdClass $obj): Inout {
+        if (!property_exists($obj, 'inout')) {
+            throw new Exception("Missing required property");
+        }
         return new Inout(
          Inout::fromInout($obj->{'inout'})
         );
@@ -20053,6 +20842,9 @@ class InstanceofClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): InstanceofClass {
+        if (!property_exists($obj, 'instanceof')) {
+            throw new Exception("Missing required property");
+        }
         return new InstanceofClass(
          InstanceofClass::fromInstanceof($obj->{'instanceof'})
         );
@@ -20151,6 +20943,9 @@ class IntClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): IntClass {
+        if (!property_exists($obj, 'int')) {
+            throw new Exception("Missing required property");
+        }
         return new IntClass(
          IntClass::fromInt($obj->{'int'})
         );
@@ -20249,6 +21044,9 @@ class InterfaceClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): InterfaceClass {
+        if (!property_exists($obj, 'interface')) {
+            throw new Exception("Missing required property");
+        }
         return new InterfaceClass(
          InterfaceClass::fromInterface($obj->{'interface'})
         );
@@ -20347,6 +21145,9 @@ class Internal {
      * @throws Exception
      */
     public static function from(stdClass $obj): Internal {
+        if (!property_exists($obj, 'internal')) {
+            throw new Exception("Missing required property");
+        }
         return new Internal(
          Internal::fromInternal($obj->{'internal'})
         );
@@ -20445,6 +21246,9 @@ class Obj2False {
      * @throws Exception
      */
     public static function from(stdClass $obj): Obj2False {
+        if (!property_exists($obj, 'false')) {
+            throw new Exception("Missing required property");
+        }
         return new Obj2False(
          Obj2False::fromFalse($obj->{'false'})
         );
@@ -23988,6 +24792,204 @@ class Obj3 {
      * @throws Exception
      */
     public static function from(stdClass $obj): Obj3 {
+        if (!property_exists($obj, 'dummy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'iterable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'jdec')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'jenc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'jpipe')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'json_converter')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'json_serializer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'json_token')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'json_writer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lambda')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lazy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'left')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'let')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'list')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lock')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'long')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'map')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'metadata_property_handling')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'module')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mutable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mutating')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'namespace')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'native')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'new')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'newtonsoft')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nil')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'NO')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'noexcept')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nonatomic')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'None')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nonlocal')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nonmutating')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'not')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'not_eq')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'NSString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'NULL')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nullptr')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'number')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'none')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'null')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'protocol')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'object')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'of')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'oneway')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'open')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'operator')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'optional')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'or')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'or_eq')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'out')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'override')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'package')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'params')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pass')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'port')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'postfix')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'precedence')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'prefix')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'print')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'printMembers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'printf')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'private')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'protected')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Protocol')) {
+            throw new Exception("Missing required property");
+        }
         return new Obj3(
          Obj3::fromDummy($obj->{'dummy'})
         ,Obj3::fromIs($obj->{'is'})
@@ -24216,6 +25218,9 @@ class Is {
      * @throws Exception
      */
     public static function from(stdClass $obj): Is {
+        if (!property_exists($obj, 'is')) {
+            throw new Exception("Missing required property");
+        }
         return new Is(
          Is::fromIs($obj->{'is'})
         );
@@ -24314,6 +25319,9 @@ class IterableClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): IterableClass {
+        if (!property_exists($obj, 'iterable')) {
+            throw new Exception("Missing required property");
+        }
         return new IterableClass(
          IterableClass::fromIterable($obj->{'iterable'})
         );
@@ -24412,6 +25420,9 @@ class Jdec {
      * @throws Exception
      */
     public static function from(stdClass $obj): Jdec {
+        if (!property_exists($obj, 'jdec')) {
+            throw new Exception("Missing required property");
+        }
         return new Jdec(
          Jdec::fromJdec($obj->{'jdec'})
         );
@@ -24510,6 +25521,9 @@ class Jenc {
      * @throws Exception
      */
     public static function from(stdClass $obj): Jenc {
+        if (!property_exists($obj, 'jenc')) {
+            throw new Exception("Missing required property");
+        }
         return new Jenc(
          Jenc::fromJenc($obj->{'jenc'})
         );
@@ -24608,6 +25622,9 @@ class Jpipe {
      * @throws Exception
      */
     public static function from(stdClass $obj): Jpipe {
+        if (!property_exists($obj, 'jpipe')) {
+            throw new Exception("Missing required property");
+        }
         return new Jpipe(
          Jpipe::fromJpipe($obj->{'jpipe'})
         );
@@ -24706,6 +25723,9 @@ class JSON {
      * @throws Exception
      */
     public static function from(stdClass $obj): JSON {
+        if (!property_exists($obj, 'json')) {
+            throw new Exception("Missing required property");
+        }
         return new JSON(
          JSON::fromJSON($obj->{'json'})
         );
@@ -24804,6 +25824,9 @@ class JSONConverter {
      * @throws Exception
      */
     public static function from(stdClass $obj): JSONConverter {
+        if (!property_exists($obj, 'json_converter')) {
+            throw new Exception("Missing required property");
+        }
         return new JSONConverter(
          JSONConverter::fromJSONConverter($obj->{'json_converter'})
         );
@@ -24902,6 +25925,9 @@ class JSONSerializer {
      * @throws Exception
      */
     public static function from(stdClass $obj): JSONSerializer {
+        if (!property_exists($obj, 'json_serializer')) {
+            throw new Exception("Missing required property");
+        }
         return new JSONSerializer(
          JSONSerializer::fromJSONSerializer($obj->{'json_serializer'})
         );
@@ -25000,6 +26026,9 @@ class JSONToken {
      * @throws Exception
      */
     public static function from(stdClass $obj): JSONToken {
+        if (!property_exists($obj, 'json_token')) {
+            throw new Exception("Missing required property");
+        }
         return new JSONToken(
          JSONToken::fromJSONToken($obj->{'json_token'})
         );
@@ -25098,6 +26127,9 @@ class JSONWriter {
      * @throws Exception
      */
     public static function from(stdClass $obj): JSONWriter {
+        if (!property_exists($obj, 'json_writer')) {
+            throw new Exception("Missing required property");
+        }
         return new JSONWriter(
          JSONWriter::fromJSONWriter($obj->{'json_writer'})
         );
@@ -25196,6 +26228,9 @@ class Lambda {
      * @throws Exception
      */
     public static function from(stdClass $obj): Lambda {
+        if (!property_exists($obj, 'lambda')) {
+            throw new Exception("Missing required property");
+        }
         return new Lambda(
          Lambda::fromLambda($obj->{'lambda'})
         );
@@ -25294,6 +26329,9 @@ class Lazy {
      * @throws Exception
      */
     public static function from(stdClass $obj): Lazy {
+        if (!property_exists($obj, 'lazy')) {
+            throw new Exception("Missing required property");
+        }
         return new Lazy(
          Lazy::fromLazy($obj->{'lazy'})
         );
@@ -25392,6 +26430,9 @@ class Left {
      * @throws Exception
      */
     public static function from(stdClass $obj): Left {
+        if (!property_exists($obj, 'left')) {
+            throw new Exception("Missing required property");
+        }
         return new Left(
          Left::fromLeft($obj->{'left'})
         );
@@ -25490,6 +26531,9 @@ class Let {
      * @throws Exception
      */
     public static function from(stdClass $obj): Let {
+        if (!property_exists($obj, 'let')) {
+            throw new Exception("Missing required property");
+        }
         return new Let(
          Let::fromLet($obj->{'let'})
         );
@@ -25588,6 +26632,9 @@ class ListClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ListClass {
+        if (!property_exists($obj, 'list')) {
+            throw new Exception("Missing required property");
+        }
         return new ListClass(
          ListClass::fromList($obj->{'list'})
         );
@@ -25686,6 +26733,9 @@ class Lock {
      * @throws Exception
      */
     public static function from(stdClass $obj): Lock {
+        if (!property_exists($obj, 'lock')) {
+            throw new Exception("Missing required property");
+        }
         return new Lock(
          Lock::fromLock($obj->{'lock'})
         );
@@ -25784,6 +26834,9 @@ class Long {
      * @throws Exception
      */
     public static function from(stdClass $obj): Long {
+        if (!property_exists($obj, 'long')) {
+            throw new Exception("Missing required property");
+        }
         return new Long(
          Long::fromLong($obj->{'long'})
         );
@@ -25882,6 +26935,9 @@ class Map {
      * @throws Exception
      */
     public static function from(stdClass $obj): Map {
+        if (!property_exists($obj, 'map')) {
+            throw new Exception("Missing required property");
+        }
         return new Map(
          Map::fromMap($obj->{'map'})
         );
@@ -25980,6 +27036,9 @@ class MetadataPropertyHandling {
      * @throws Exception
      */
     public static function from(stdClass $obj): MetadataPropertyHandling {
+        if (!property_exists($obj, 'metadata_property_handling')) {
+            throw new Exception("Missing required property");
+        }
         return new MetadataPropertyHandling(
          MetadataPropertyHandling::fromMetadataPropertyHandling($obj->{'metadata_property_handling'})
         );
@@ -26078,6 +27137,9 @@ class Module {
      * @throws Exception
      */
     public static function from(stdClass $obj): Module {
+        if (!property_exists($obj, 'module')) {
+            throw new Exception("Missing required property");
+        }
         return new Module(
          Module::fromModule($obj->{'module'})
         );
@@ -26176,6 +27238,9 @@ class Mutable {
      * @throws Exception
      */
     public static function from(stdClass $obj): Mutable {
+        if (!property_exists($obj, 'mutable')) {
+            throw new Exception("Missing required property");
+        }
         return new Mutable(
          Mutable::fromMutable($obj->{'mutable'})
         );
@@ -26274,6 +27339,9 @@ class Mutating {
      * @throws Exception
      */
     public static function from(stdClass $obj): Mutating {
+        if (!property_exists($obj, 'mutating')) {
+            throw new Exception("Missing required property");
+        }
         return new Mutating(
          Mutating::fromMutating($obj->{'mutating'})
         );
@@ -26372,6 +27440,9 @@ class NamespaceClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): NamespaceClass {
+        if (!property_exists($obj, 'namespace')) {
+            throw new Exception("Missing required property");
+        }
         return new NamespaceClass(
          NamespaceClass::fromNamespace($obj->{'namespace'})
         );
@@ -26470,6 +27541,9 @@ class Native {
      * @throws Exception
      */
     public static function from(stdClass $obj): Native {
+        if (!property_exists($obj, 'native')) {
+            throw new Exception("Missing required property");
+        }
         return new Native(
          Native::fromNative($obj->{'native'})
         );
@@ -26568,6 +27642,9 @@ class NewClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): NewClass {
+        if (!property_exists($obj, 'new')) {
+            throw new Exception("Missing required property");
+        }
         return new NewClass(
          NewClass::fromNew($obj->{'new'})
         );
@@ -26666,6 +27743,9 @@ class Newtonsoft {
      * @throws Exception
      */
     public static function from(stdClass $obj): Newtonsoft {
+        if (!property_exists($obj, 'newtonsoft')) {
+            throw new Exception("Missing required property");
+        }
         return new Newtonsoft(
          Newtonsoft::fromNewtonsoft($obj->{'newtonsoft'})
         );
@@ -26764,6 +27844,9 @@ class Nil {
      * @throws Exception
      */
     public static function from(stdClass $obj): Nil {
+        if (!property_exists($obj, 'nil')) {
+            throw new Exception("Missing required property");
+        }
         return new Nil(
          Nil::fromNil($obj->{'nil'})
         );
@@ -26862,6 +27945,9 @@ class No {
      * @throws Exception
      */
     public static function from(stdClass $obj): No {
+        if (!property_exists($obj, 'NO')) {
+            throw new Exception("Missing required property");
+        }
         return new No(
          No::fromNo($obj->{'NO'})
         );
@@ -26960,6 +28046,9 @@ class Noexcept {
      * @throws Exception
      */
     public static function from(stdClass $obj): Noexcept {
+        if (!property_exists($obj, 'noexcept')) {
+            throw new Exception("Missing required property");
+        }
         return new Noexcept(
          Noexcept::fromNoexcept($obj->{'noexcept'})
         );
@@ -27058,6 +28147,9 @@ class Nonatomic {
      * @throws Exception
      */
     public static function from(stdClass $obj): Nonatomic {
+        if (!property_exists($obj, 'nonatomic')) {
+            throw new Exception("Missing required property");
+        }
         return new Nonatomic(
          Nonatomic::fromNonatomic($obj->{'nonatomic'})
         );
@@ -27156,6 +28248,9 @@ class None {
      * @throws Exception
      */
     public static function from(stdClass $obj): None {
+        if (!property_exists($obj, 'None')) {
+            throw new Exception("Missing required property");
+        }
         return new None(
          None::fromNone($obj->{'None'})
         );
@@ -27254,6 +28349,9 @@ class Nonlocal {
      * @throws Exception
      */
     public static function from(stdClass $obj): Nonlocal {
+        if (!property_exists($obj, 'nonlocal')) {
+            throw new Exception("Missing required property");
+        }
         return new Nonlocal(
          Nonlocal::fromNonlocal($obj->{'nonlocal'})
         );
@@ -27352,6 +28450,9 @@ class Nonmutating {
      * @throws Exception
      */
     public static function from(stdClass $obj): Nonmutating {
+        if (!property_exists($obj, 'nonmutating')) {
+            throw new Exception("Missing required property");
+        }
         return new Nonmutating(
          Nonmutating::fromNonmutating($obj->{'nonmutating'})
         );
@@ -27450,6 +28551,9 @@ class Not {
      * @throws Exception
      */
     public static function from(stdClass $obj): Not {
+        if (!property_exists($obj, 'not')) {
+            throw new Exception("Missing required property");
+        }
         return new Not(
          Not::fromNot($obj->{'not'})
         );
@@ -27548,6 +28652,9 @@ class NotEq {
      * @throws Exception
      */
     public static function from(stdClass $obj): NotEq {
+        if (!property_exists($obj, 'not_eq')) {
+            throw new Exception("Missing required property");
+        }
         return new NotEq(
          NotEq::fromNotEq($obj->{'not_eq'})
         );
@@ -27646,6 +28753,9 @@ class NSString {
      * @throws Exception
      */
     public static function from(stdClass $obj): NSString {
+        if (!property_exists($obj, 'NSString')) {
+            throw new Exception("Missing required property");
+        }
         return new NSString(
          NSString::fromNSString($obj->{'NSString'})
         );
@@ -27744,6 +28854,9 @@ class NULLClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): NULLClass {
+        if (!property_exists($obj, 'NULL')) {
+            throw new Exception("Missing required property");
+        }
         return new NULLClass(
          NULLClass::fromNull($obj->{'NULL'})
         );
@@ -27842,6 +28955,9 @@ class Nullptr {
      * @throws Exception
      */
     public static function from(stdClass $obj): Nullptr {
+        if (!property_exists($obj, 'nullptr')) {
+            throw new Exception("Missing required property");
+        }
         return new Nullptr(
          Nullptr::fromNullptr($obj->{'nullptr'})
         );
@@ -27940,6 +29056,9 @@ class Number {
      * @throws Exception
      */
     public static function from(stdClass $obj): Number {
+        if (!property_exists($obj, 'number')) {
+            throw new Exception("Missing required property");
+        }
         return new Number(
          Number::fromNumber($obj->{'number'})
         );
@@ -28038,6 +29157,9 @@ class NoneClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): NoneClass {
+        if (!property_exists($obj, 'none')) {
+            throw new Exception("Missing required property");
+        }
         return new NoneClass(
          NoneClass::fromNone($obj->{'none'})
         );
@@ -28136,6 +29258,9 @@ class Obj3Null {
      * @throws Exception
      */
     public static function from(stdClass $obj): Obj3Null {
+        if (!property_exists($obj, 'null')) {
+            throw new Exception("Missing required property");
+        }
         return new Obj3Null(
          Obj3Null::fromNull($obj->{'null'})
         );
@@ -28234,6 +29359,9 @@ class ProtocolClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ProtocolClass {
+        if (!property_exists($obj, 'protocol')) {
+            throw new Exception("Missing required property");
+        }
         return new ProtocolClass(
          ProtocolClass::fromProtocol($obj->{'protocol'})
         );
@@ -28332,6 +29460,9 @@ class ObjectClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ObjectClass {
+        if (!property_exists($obj, 'object')) {
+            throw new Exception("Missing required property");
+        }
         return new ObjectClass(
          ObjectClass::fromObject($obj->{'object'})
         );
@@ -28430,6 +29561,9 @@ class Of {
      * @throws Exception
      */
     public static function from(stdClass $obj): Of {
+        if (!property_exists($obj, 'of')) {
+            throw new Exception("Missing required property");
+        }
         return new Of(
          Of::fromOf($obj->{'of'})
         );
@@ -28528,6 +29662,9 @@ class Oneway {
      * @throws Exception
      */
     public static function from(stdClass $obj): Oneway {
+        if (!property_exists($obj, 'oneway')) {
+            throw new Exception("Missing required property");
+        }
         return new Oneway(
          Oneway::fromOneway($obj->{'oneway'})
         );
@@ -28626,6 +29763,9 @@ class Open {
      * @throws Exception
      */
     public static function from(stdClass $obj): Open {
+        if (!property_exists($obj, 'open')) {
+            throw new Exception("Missing required property");
+        }
         return new Open(
          Open::fromOpen($obj->{'open'})
         );
@@ -28724,6 +29864,9 @@ class Operator {
      * @throws Exception
      */
     public static function from(stdClass $obj): Operator {
+        if (!property_exists($obj, 'operator')) {
+            throw new Exception("Missing required property");
+        }
         return new Operator(
          Operator::fromOperator($obj->{'operator'})
         );
@@ -28822,6 +29965,9 @@ class Optional {
      * @throws Exception
      */
     public static function from(stdClass $obj): Optional {
+        if (!property_exists($obj, 'optional')) {
+            throw new Exception("Missing required property");
+        }
         return new Optional(
          Optional::fromOptional($obj->{'optional'})
         );
@@ -28920,6 +30066,9 @@ class OrClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): OrClass {
+        if (!property_exists($obj, 'or')) {
+            throw new Exception("Missing required property");
+        }
         return new OrClass(
          OrClass::fromOr($obj->{'or'})
         );
@@ -29018,6 +30167,9 @@ class OrEq {
      * @throws Exception
      */
     public static function from(stdClass $obj): OrEq {
+        if (!property_exists($obj, 'or_eq')) {
+            throw new Exception("Missing required property");
+        }
         return new OrEq(
          OrEq::fromOrEq($obj->{'or_eq'})
         );
@@ -29116,6 +30268,9 @@ class Out {
      * @throws Exception
      */
     public static function from(stdClass $obj): Out {
+        if (!property_exists($obj, 'out')) {
+            throw new Exception("Missing required property");
+        }
         return new Out(
          Out::fromOut($obj->{'out'})
         );
@@ -29214,6 +30369,9 @@ class OverrideClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): OverrideClass {
+        if (!property_exists($obj, 'override')) {
+            throw new Exception("Missing required property");
+        }
         return new OverrideClass(
          OverrideClass::fromOverride($obj->{'override'})
         );
@@ -29312,6 +30470,9 @@ class Package {
      * @throws Exception
      */
     public static function from(stdClass $obj): Package {
+        if (!property_exists($obj, 'package')) {
+            throw new Exception("Missing required property");
+        }
         return new Package(
          Package::fromPackage($obj->{'package'})
         );
@@ -29410,6 +30571,9 @@ class Params {
      * @throws Exception
      */
     public static function from(stdClass $obj): Params {
+        if (!property_exists($obj, 'params')) {
+            throw new Exception("Missing required property");
+        }
         return new Params(
          Params::fromParams($obj->{'params'})
         );
@@ -29508,6 +30672,9 @@ class Pass {
      * @throws Exception
      */
     public static function from(stdClass $obj): Pass {
+        if (!property_exists($obj, 'pass')) {
+            throw new Exception("Missing required property");
+        }
         return new Pass(
          Pass::fromPass($obj->{'pass'})
         );
@@ -29606,6 +30773,9 @@ class Port {
      * @throws Exception
      */
     public static function from(stdClass $obj): Port {
+        if (!property_exists($obj, 'port')) {
+            throw new Exception("Missing required property");
+        }
         return new Port(
          Port::fromPort($obj->{'port'})
         );
@@ -29704,6 +30874,9 @@ class Postfix {
      * @throws Exception
      */
     public static function from(stdClass $obj): Postfix {
+        if (!property_exists($obj, 'postfix')) {
+            throw new Exception("Missing required property");
+        }
         return new Postfix(
          Postfix::fromPostfix($obj->{'postfix'})
         );
@@ -29802,6 +30975,9 @@ class Precedence {
      * @throws Exception
      */
     public static function from(stdClass $obj): Precedence {
+        if (!property_exists($obj, 'precedence')) {
+            throw new Exception("Missing required property");
+        }
         return new Precedence(
          Precedence::fromPrecedence($obj->{'precedence'})
         );
@@ -29900,6 +31076,9 @@ class Prefix {
      * @throws Exception
      */
     public static function from(stdClass $obj): Prefix {
+        if (!property_exists($obj, 'prefix')) {
+            throw new Exception("Missing required property");
+        }
         return new Prefix(
          Prefix::fromPrefix($obj->{'prefix'})
         );
@@ -29998,6 +31177,9 @@ class PrintClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): PrintClass {
+        if (!property_exists($obj, 'print')) {
+            throw new Exception("Missing required property");
+        }
         return new PrintClass(
          PrintClass::fromPrint($obj->{'print'})
         );
@@ -30096,6 +31278,9 @@ class PrintMembers {
      * @throws Exception
      */
     public static function from(stdClass $obj): PrintMembers {
+        if (!property_exists($obj, 'printMembers')) {
+            throw new Exception("Missing required property");
+        }
         return new PrintMembers(
          PrintMembers::fromPrintMembers($obj->{'printMembers'})
         );
@@ -30194,6 +31379,9 @@ class Printf {
      * @throws Exception
      */
     public static function from(stdClass $obj): Printf {
+        if (!property_exists($obj, 'printf')) {
+            throw new Exception("Missing required property");
+        }
         return new Printf(
          Printf::fromPrintf($obj->{'printf'})
         );
@@ -30292,6 +31480,9 @@ class PrivateClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): PrivateClass {
+        if (!property_exists($obj, 'private')) {
+            throw new Exception("Missing required property");
+        }
         return new PrivateClass(
          PrivateClass::fromPrivate($obj->{'private'})
         );
@@ -30390,6 +31581,9 @@ class ProtectedClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ProtectedClass {
+        if (!property_exists($obj, 'protected')) {
+            throw new Exception("Missing required property");
+        }
         return new ProtectedClass(
          ProtectedClass::fromProtected($obj->{'protected'})
         );
@@ -30488,6 +31682,9 @@ class Protocol {
      * @throws Exception
      */
     public static function from(stdClass $obj): Protocol {
+        if (!property_exists($obj, 'Protocol')) {
+            throw new Exception("Missing required property");
+        }
         return new Protocol(
          Protocol::fromProtocol($obj->{'Protocol'})
         );
@@ -33978,6 +35175,201 @@ class Obj4 {
      * @throws Exception
      */
     public static function from(stdClass $obj): Obj4 {
+        if (!property_exists($obj, 'dummy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'self')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'this')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'true')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'public')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'quicktype')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'raise')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'range')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'readonly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ref')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'register')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'reinterpret_cast')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'repeat')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'require')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'required')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'requires')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'restrict')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'retain')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rethrows')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'return')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'right')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sbyte')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sealed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'SEL')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'select')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Self')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'serialize')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'set')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'short')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'signed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sizeof')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stackalloc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'static')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'static_assert')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'static_cast')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'strictfp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'string')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'struct')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subscript')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'super')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'switch')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'symbol')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'synchronized')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'system')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'template')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'then')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thread_local')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'throw')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'throws')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'to_json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'top_level')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'transient')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'True')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'try')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'Type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'typealias')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'typedef')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'typeid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'typename')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'typeof')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uint')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ulong')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unchecked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'undefined')) {
+            throw new Exception("Missing required property");
+        }
         return new Obj4(
          Obj4::fromDummy($obj->{'dummy'})
         ,Obj4::fromObj4Self($obj->{'self'})
@@ -34204,6 +35596,9 @@ class Obj4Self {
      * @throws Exception
      */
     public static function from(stdClass $obj): Obj4Self {
+        if (!property_exists($obj, 'self')) {
+            throw new Exception("Missing required property");
+        }
         return new Obj4Self(
          Obj4Self::fromSelf($obj->{'self'})
         );
@@ -34302,6 +35697,9 @@ class This {
      * @throws Exception
      */
     public static function from(stdClass $obj): This {
+        if (!property_exists($obj, 'this')) {
+            throw new Exception("Missing required property");
+        }
         return new This(
          This::fromThisThis($obj->{'this'})
         );
@@ -34400,6 +35798,9 @@ class Obj4True {
      * @throws Exception
      */
     public static function from(stdClass $obj): Obj4True {
+        if (!property_exists($obj, 'true')) {
+            throw new Exception("Missing required property");
+        }
         return new Obj4True(
          Obj4True::fromTrue($obj->{'true'})
         );
@@ -34498,6 +35899,9 @@ class TypeClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): TypeClass {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new TypeClass(
          TypeClass::fromType($obj->{'type'})
         );
@@ -34596,6 +36000,9 @@ class PublicClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): PublicClass {
+        if (!property_exists($obj, 'public')) {
+            throw new Exception("Missing required property");
+        }
         return new PublicClass(
          PublicClass::fromPublic($obj->{'public'})
         );
@@ -34694,6 +36101,9 @@ class Quicktype {
      * @throws Exception
      */
     public static function from(stdClass $obj): Quicktype {
+        if (!property_exists($obj, 'quicktype')) {
+            throw new Exception("Missing required property");
+        }
         return new Quicktype(
          Quicktype::fromQuicktype($obj->{'quicktype'})
         );
@@ -34792,6 +36202,9 @@ class Raise {
      * @throws Exception
      */
     public static function from(stdClass $obj): Raise {
+        if (!property_exists($obj, 'raise')) {
+            throw new Exception("Missing required property");
+        }
         return new Raise(
          Raise::fromRaise($obj->{'raise'})
         );
@@ -34890,6 +36303,9 @@ class Range {
      * @throws Exception
      */
     public static function from(stdClass $obj): Range {
+        if (!property_exists($obj, 'range')) {
+            throw new Exception("Missing required property");
+        }
         return new Range(
          Range::fromRange($obj->{'range'})
         );
@@ -34988,6 +36404,9 @@ class ReadonlyClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ReadonlyClass {
+        if (!property_exists($obj, 'readonly')) {
+            throw new Exception("Missing required property");
+        }
         return new ReadonlyClass(
          ReadonlyClass::fromReadonly($obj->{'readonly'})
         );
@@ -35086,6 +36505,9 @@ class Ref {
      * @throws Exception
      */
     public static function from(stdClass $obj): Ref {
+        if (!property_exists($obj, 'ref')) {
+            throw new Exception("Missing required property");
+        }
         return new Ref(
          Ref::fromRef($obj->{'ref'})
         );
@@ -35184,6 +36606,9 @@ class Register {
      * @throws Exception
      */
     public static function from(stdClass $obj): Register {
+        if (!property_exists($obj, 'register')) {
+            throw new Exception("Missing required property");
+        }
         return new Register(
          Register::fromRegister($obj->{'register'})
         );
@@ -35282,6 +36707,9 @@ class ReinterpretCast {
      * @throws Exception
      */
     public static function from(stdClass $obj): ReinterpretCast {
+        if (!property_exists($obj, 'reinterpret_cast')) {
+            throw new Exception("Missing required property");
+        }
         return new ReinterpretCast(
          ReinterpretCast::fromReinterpretCast($obj->{'reinterpret_cast'})
         );
@@ -35380,6 +36808,9 @@ class Repeat {
      * @throws Exception
      */
     public static function from(stdClass $obj): Repeat {
+        if (!property_exists($obj, 'repeat')) {
+            throw new Exception("Missing required property");
+        }
         return new Repeat(
          Repeat::fromRepeat($obj->{'repeat'})
         );
@@ -35478,6 +36909,9 @@ class RequireClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): RequireClass {
+        if (!property_exists($obj, 'require')) {
+            throw new Exception("Missing required property");
+        }
         return new RequireClass(
          RequireClass::fromRequire($obj->{'require'})
         );
@@ -35576,6 +37010,9 @@ class Required {
      * @throws Exception
      */
     public static function from(stdClass $obj): Required {
+        if (!property_exists($obj, 'required')) {
+            throw new Exception("Missing required property");
+        }
         return new Required(
          Required::fromRequired($obj->{'required'})
         );
@@ -35674,6 +37111,9 @@ class Requires {
      * @throws Exception
      */
     public static function from(stdClass $obj): Requires {
+        if (!property_exists($obj, 'requires')) {
+            throw new Exception("Missing required property");
+        }
         return new Requires(
          Requires::fromRequires($obj->{'requires'})
         );
@@ -35772,6 +37212,9 @@ class Restrict {
      * @throws Exception
      */
     public static function from(stdClass $obj): Restrict {
+        if (!property_exists($obj, 'restrict')) {
+            throw new Exception("Missing required property");
+        }
         return new Restrict(
          Restrict::fromRestrict($obj->{'restrict'})
         );
@@ -35870,6 +37313,9 @@ class Retain {
      * @throws Exception
      */
     public static function from(stdClass $obj): Retain {
+        if (!property_exists($obj, 'retain')) {
+            throw new Exception("Missing required property");
+        }
         return new Retain(
          Retain::fromRetain($obj->{'retain'})
         );
@@ -35968,6 +37414,9 @@ class Rethrows {
      * @throws Exception
      */
     public static function from(stdClass $obj): Rethrows {
+        if (!property_exists($obj, 'rethrows')) {
+            throw new Exception("Missing required property");
+        }
         return new Rethrows(
          Rethrows::fromRethrows($obj->{'rethrows'})
         );
@@ -36066,6 +37515,9 @@ class ReturnClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ReturnClass {
+        if (!property_exists($obj, 'return')) {
+            throw new Exception("Missing required property");
+        }
         return new ReturnClass(
          ReturnClass::fromReturn($obj->{'return'})
         );
@@ -36164,6 +37616,9 @@ class Right {
      * @throws Exception
      */
     public static function from(stdClass $obj): Right {
+        if (!property_exists($obj, 'right')) {
+            throw new Exception("Missing required property");
+        }
         return new Right(
          Right::fromRight($obj->{'right'})
         );
@@ -36262,6 +37717,9 @@ class Sbyte {
      * @throws Exception
      */
     public static function from(stdClass $obj): Sbyte {
+        if (!property_exists($obj, 'sbyte')) {
+            throw new Exception("Missing required property");
+        }
         return new Sbyte(
          Sbyte::fromSbyte($obj->{'sbyte'})
         );
@@ -36360,6 +37818,9 @@ class Sealed {
      * @throws Exception
      */
     public static function from(stdClass $obj): Sealed {
+        if (!property_exists($obj, 'sealed')) {
+            throw new Exception("Missing required property");
+        }
         return new Sealed(
          Sealed::fromSealed($obj->{'sealed'})
         );
@@ -36458,6 +37919,9 @@ class Sel {
      * @throws Exception
      */
     public static function from(stdClass $obj): Sel {
+        if (!property_exists($obj, 'SEL')) {
+            throw new Exception("Missing required property");
+        }
         return new Sel(
          Sel::fromSel($obj->{'SEL'})
         );
@@ -36556,6 +38020,9 @@ class Select {
      * @throws Exception
      */
     public static function from(stdClass $obj): Select {
+        if (!property_exists($obj, 'select')) {
+            throw new Exception("Missing required property");
+        }
         return new Select(
          Select::fromSelect($obj->{'select'})
         );
@@ -36654,6 +38121,9 @@ class SelfClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): SelfClass {
+        if (!property_exists($obj, 'Self')) {
+            throw new Exception("Missing required property");
+        }
         return new SelfClass(
          SelfClass::fromSelf($obj->{'Self'})
         );
@@ -36752,6 +38222,9 @@ class Serialize {
      * @throws Exception
      */
     public static function from(stdClass $obj): Serialize {
+        if (!property_exists($obj, 'serialize')) {
+            throw new Exception("Missing required property");
+        }
         return new Serialize(
          Serialize::fromSerialize($obj->{'serialize'})
         );
@@ -36850,6 +38323,9 @@ class Set {
      * @throws Exception
      */
     public static function from(stdClass $obj): Set {
+        if (!property_exists($obj, 'set')) {
+            throw new Exception("Missing required property");
+        }
         return new Set(
          Set::fromSet($obj->{'set'})
         );
@@ -36948,6 +38424,9 @@ class Short {
      * @throws Exception
      */
     public static function from(stdClass $obj): Short {
+        if (!property_exists($obj, 'short')) {
+            throw new Exception("Missing required property");
+        }
         return new Short(
          Short::fromShort($obj->{'short'})
         );
@@ -37046,6 +38525,9 @@ class Signed {
      * @throws Exception
      */
     public static function from(stdClass $obj): Signed {
+        if (!property_exists($obj, 'signed')) {
+            throw new Exception("Missing required property");
+        }
         return new Signed(
          Signed::fromSigned($obj->{'signed'})
         );
@@ -37144,6 +38626,9 @@ class Sizeof {
      * @throws Exception
      */
     public static function from(stdClass $obj): Sizeof {
+        if (!property_exists($obj, 'sizeof')) {
+            throw new Exception("Missing required property");
+        }
         return new Sizeof(
          Sizeof::fromSizeof($obj->{'sizeof'})
         );
@@ -37242,6 +38727,9 @@ class Stackalloc {
      * @throws Exception
      */
     public static function from(stdClass $obj): Stackalloc {
+        if (!property_exists($obj, 'stackalloc')) {
+            throw new Exception("Missing required property");
+        }
         return new Stackalloc(
          Stackalloc::fromStackalloc($obj->{'stackalloc'})
         );
@@ -37340,6 +38828,9 @@ class StaticClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): StaticClass {
+        if (!property_exists($obj, 'static')) {
+            throw new Exception("Missing required property");
+        }
         return new StaticClass(
          StaticClass::fromStatic($obj->{'static'})
         );
@@ -37438,6 +38929,9 @@ class StaticAssert {
      * @throws Exception
      */
     public static function from(stdClass $obj): StaticAssert {
+        if (!property_exists($obj, 'static_assert')) {
+            throw new Exception("Missing required property");
+        }
         return new StaticAssert(
          StaticAssert::fromStaticAssert($obj->{'static_assert'})
         );
@@ -37536,6 +39030,9 @@ class StaticCast {
      * @throws Exception
      */
     public static function from(stdClass $obj): StaticCast {
+        if (!property_exists($obj, 'static_cast')) {
+            throw new Exception("Missing required property");
+        }
         return new StaticCast(
          StaticCast::fromStaticCast($obj->{'static_cast'})
         );
@@ -37634,6 +39131,9 @@ class Strictfp {
      * @throws Exception
      */
     public static function from(stdClass $obj): Strictfp {
+        if (!property_exists($obj, 'strictfp')) {
+            throw new Exception("Missing required property");
+        }
         return new Strictfp(
          Strictfp::fromStrictfp($obj->{'strictfp'})
         );
@@ -37732,6 +39232,9 @@ class StringClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): StringClass {
+        if (!property_exists($obj, 'string')) {
+            throw new Exception("Missing required property");
+        }
         return new StringClass(
          StringClass::fromString($obj->{'string'})
         );
@@ -37830,6 +39333,9 @@ class Struct {
      * @throws Exception
      */
     public static function from(stdClass $obj): Struct {
+        if (!property_exists($obj, 'struct')) {
+            throw new Exception("Missing required property");
+        }
         return new Struct(
          Struct::fromStruct($obj->{'struct'})
         );
@@ -37928,6 +39434,9 @@ class Subscript {
      * @throws Exception
      */
     public static function from(stdClass $obj): Subscript {
+        if (!property_exists($obj, 'subscript')) {
+            throw new Exception("Missing required property");
+        }
         return new Subscript(
          Subscript::fromSubscript($obj->{'subscript'})
         );
@@ -38026,6 +39535,9 @@ class Super {
      * @throws Exception
      */
     public static function from(stdClass $obj): Super {
+        if (!property_exists($obj, 'super')) {
+            throw new Exception("Missing required property");
+        }
         return new Super(
          Super::fromSuper($obj->{'super'})
         );
@@ -38124,6 +39636,9 @@ class SwitchClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): SwitchClass {
+        if (!property_exists($obj, 'switch')) {
+            throw new Exception("Missing required property");
+        }
         return new SwitchClass(
          SwitchClass::fromSwitch($obj->{'switch'})
         );
@@ -38222,6 +39737,9 @@ class Symbol {
      * @throws Exception
      */
     public static function from(stdClass $obj): Symbol {
+        if (!property_exists($obj, 'symbol')) {
+            throw new Exception("Missing required property");
+        }
         return new Symbol(
          Symbol::fromSymbol($obj->{'symbol'})
         );
@@ -38320,6 +39838,9 @@ class Synchronized {
      * @throws Exception
      */
     public static function from(stdClass $obj): Synchronized {
+        if (!property_exists($obj, 'synchronized')) {
+            throw new Exception("Missing required property");
+        }
         return new Synchronized(
          Synchronized::fromSynchronized($obj->{'synchronized'})
         );
@@ -38418,6 +39939,9 @@ class System {
      * @throws Exception
      */
     public static function from(stdClass $obj): System {
+        if (!property_exists($obj, 'system')) {
+            throw new Exception("Missing required property");
+        }
         return new System(
          System::fromSystem($obj->{'system'})
         );
@@ -38516,6 +40040,9 @@ class Template {
      * @throws Exception
      */
     public static function from(stdClass $obj): Template {
+        if (!property_exists($obj, 'template')) {
+            throw new Exception("Missing required property");
+        }
         return new Template(
          Template::fromTemplate($obj->{'template'})
         );
@@ -38614,6 +40141,9 @@ class Then {
      * @throws Exception
      */
     public static function from(stdClass $obj): Then {
+        if (!property_exists($obj, 'then')) {
+            throw new Exception("Missing required property");
+        }
         return new Then(
          Then::fromThen($obj->{'then'})
         );
@@ -38712,6 +40242,9 @@ class ThreadLocal {
      * @throws Exception
      */
     public static function from(stdClass $obj): ThreadLocal {
+        if (!property_exists($obj, 'thread_local')) {
+            throw new Exception("Missing required property");
+        }
         return new ThreadLocal(
          ThreadLocal::fromThreadLocal($obj->{'thread_local'})
         );
@@ -38810,6 +40343,9 @@ class ThrowClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): ThrowClass {
+        if (!property_exists($obj, 'throw')) {
+            throw new Exception("Missing required property");
+        }
         return new ThrowClass(
          ThrowClass::fromThrow($obj->{'throw'})
         );
@@ -38908,6 +40444,9 @@ class Throws {
      * @throws Exception
      */
     public static function from(stdClass $obj): Throws {
+        if (!property_exists($obj, 'throws')) {
+            throw new Exception("Missing required property");
+        }
         return new Throws(
          Throws::fromThrows($obj->{'throws'})
         );
@@ -39006,6 +40545,9 @@ class ToJSON {
      * @throws Exception
      */
     public static function from(stdClass $obj): ToJSON {
+        if (!property_exists($obj, 'to_json')) {
+            throw new Exception("Missing required property");
+        }
         return new ToJSON(
          ToJSON::fromToJSON($obj->{'to_json'})
         );
@@ -39104,6 +40646,9 @@ class TopLevelClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevelClass {
+        if (!property_exists($obj, 'top_level')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevelClass(
          TopLevelClass::fromTopLevel($obj->{'top_level'})
         );
@@ -39202,6 +40747,9 @@ class Transient {
      * @throws Exception
      */
     public static function from(stdClass $obj): Transient {
+        if (!property_exists($obj, 'transient')) {
+            throw new Exception("Missing required property");
+        }
         return new Transient(
          Transient::fromTransient($obj->{'transient'})
         );
@@ -39300,6 +40848,9 @@ class TrueClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): TrueClass {
+        if (!property_exists($obj, 'True')) {
+            throw new Exception("Missing required property");
+        }
         return new TrueClass(
          TrueClass::fromTrue($obj->{'True'})
         );
@@ -39398,6 +40949,9 @@ class TryClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): TryClass {
+        if (!property_exists($obj, 'try')) {
+            throw new Exception("Missing required property");
+        }
         return new TryClass(
          TryClass::fromTry($obj->{'try'})
         );
@@ -39496,6 +41050,9 @@ class Type {
      * @throws Exception
      */
     public static function from(stdClass $obj): Type {
+        if (!property_exists($obj, 'Type')) {
+            throw new Exception("Missing required property");
+        }
         return new Type(
          Type::fromType($obj->{'Type'})
         );
@@ -39594,6 +41151,9 @@ class Typealias {
      * @throws Exception
      */
     public static function from(stdClass $obj): Typealias {
+        if (!property_exists($obj, 'typealias')) {
+            throw new Exception("Missing required property");
+        }
         return new Typealias(
          Typealias::fromTypealias($obj->{'typealias'})
         );
@@ -39692,6 +41252,9 @@ class Typedef {
      * @throws Exception
      */
     public static function from(stdClass $obj): Typedef {
+        if (!property_exists($obj, 'typedef')) {
+            throw new Exception("Missing required property");
+        }
         return new Typedef(
          Typedef::fromTypedef($obj->{'typedef'})
         );
@@ -39790,6 +41353,9 @@ class Typeid {
      * @throws Exception
      */
     public static function from(stdClass $obj): Typeid {
+        if (!property_exists($obj, 'typeid')) {
+            throw new Exception("Missing required property");
+        }
         return new Typeid(
          Typeid::fromTypeid($obj->{'typeid'})
         );
@@ -39888,6 +41454,9 @@ class Typename {
      * @throws Exception
      */
     public static function from(stdClass $obj): Typename {
+        if (!property_exists($obj, 'typename')) {
+            throw new Exception("Missing required property");
+        }
         return new Typename(
          Typename::fromTypename($obj->{'typename'})
         );
@@ -39986,6 +41555,9 @@ class Typeof {
      * @throws Exception
      */
     public static function from(stdClass $obj): Typeof {
+        if (!property_exists($obj, 'typeof')) {
+            throw new Exception("Missing required property");
+        }
         return new Typeof(
          Typeof::fromTypeof($obj->{'typeof'})
         );
@@ -40084,6 +41656,9 @@ class Uint {
      * @throws Exception
      */
     public static function from(stdClass $obj): Uint {
+        if (!property_exists($obj, 'uint')) {
+            throw new Exception("Missing required property");
+        }
         return new Uint(
          Uint::fromUint($obj->{'uint'})
         );
@@ -40182,6 +41757,9 @@ class Ulong {
      * @throws Exception
      */
     public static function from(stdClass $obj): Ulong {
+        if (!property_exists($obj, 'ulong')) {
+            throw new Exception("Missing required property");
+        }
         return new Ulong(
          Ulong::fromUlong($obj->{'ulong'})
         );
@@ -40280,6 +41858,9 @@ class Unchecked {
      * @throws Exception
      */
     public static function from(stdClass $obj): Unchecked {
+        if (!property_exists($obj, 'unchecked')) {
+            throw new Exception("Missing required property");
+        }
         return new Unchecked(
          Unchecked::fromUnchecked($obj->{'unchecked'})
         );
@@ -40378,6 +41959,9 @@ class Undefined {
      * @throws Exception
      */
     public static function from(stdClass $obj): Undefined {
+        if (!property_exists($obj, 'undefined')) {
+            throw new Exception("Missing required property");
+        }
         return new Undefined(
          Undefined::fromUndefined($obj->{'undefined'})
         );
@@ -41536,6 +43120,69 @@ class Obj5 {
      * @throws Exception
      */
     public static function from(stdClass $obj): Obj5 {
+        if (!property_exists($obj, 'dummy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'union')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unowned')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unsafe')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unsigned')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ushort')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'using')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'var')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'virtual')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'void')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'volatile')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'wchar_t')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weak')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'where')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'while')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'willSet')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'with')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'xor')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'xor_eq')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'YES')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'yield')) {
+            throw new Exception("Missing required property");
+        }
         return new Obj5(
          Obj5::fromDummy($obj->{'dummy'})
         ,Obj5::fromUnion($obj->{'union'})
@@ -41674,6 +43321,9 @@ class Union {
      * @throws Exception
      */
     public static function from(stdClass $obj): Union {
+        if (!property_exists($obj, 'union')) {
+            throw new Exception("Missing required property");
+        }
         return new Union(
          Union::fromUnion($obj->{'union'})
         );
@@ -41772,6 +43422,9 @@ class Unowned {
      * @throws Exception
      */
     public static function from(stdClass $obj): Unowned {
+        if (!property_exists($obj, 'unowned')) {
+            throw new Exception("Missing required property");
+        }
         return new Unowned(
          Unowned::fromUnowned($obj->{'unowned'})
         );
@@ -41870,6 +43523,9 @@ class Unsafe {
      * @throws Exception
      */
     public static function from(stdClass $obj): Unsafe {
+        if (!property_exists($obj, 'unsafe')) {
+            throw new Exception("Missing required property");
+        }
         return new Unsafe(
          Unsafe::fromUnsafe($obj->{'unsafe'})
         );
@@ -41968,6 +43624,9 @@ class Unsigned {
      * @throws Exception
      */
     public static function from(stdClass $obj): Unsigned {
+        if (!property_exists($obj, 'unsigned')) {
+            throw new Exception("Missing required property");
+        }
         return new Unsigned(
          Unsigned::fromUnsigned($obj->{'unsigned'})
         );
@@ -42066,6 +43725,9 @@ class Ushort {
      * @throws Exception
      */
     public static function from(stdClass $obj): Ushort {
+        if (!property_exists($obj, 'ushort')) {
+            throw new Exception("Missing required property");
+        }
         return new Ushort(
          Ushort::fromUshort($obj->{'ushort'})
         );
@@ -42164,6 +43826,9 @@ class Using {
      * @throws Exception
      */
     public static function from(stdClass $obj): Using {
+        if (!property_exists($obj, 'using')) {
+            throw new Exception("Missing required property");
+        }
         return new Using(
          Using::fromUsing($obj->{'using'})
         );
@@ -42262,6 +43927,9 @@ class VarClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): VarClass {
+        if (!property_exists($obj, 'var')) {
+            throw new Exception("Missing required property");
+        }
         return new VarClass(
          VarClass::fromVar($obj->{'var'})
         );
@@ -42360,6 +44028,9 @@ class Virtual {
      * @throws Exception
      */
     public static function from(stdClass $obj): Virtual {
+        if (!property_exists($obj, 'virtual')) {
+            throw new Exception("Missing required property");
+        }
         return new Virtual(
          Virtual::fromVirtual($obj->{'virtual'})
         );
@@ -42458,6 +44129,9 @@ class VoidClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): VoidClass {
+        if (!property_exists($obj, 'void')) {
+            throw new Exception("Missing required property");
+        }
         return new VoidClass(
          VoidClass::fromVoid($obj->{'void'})
         );
@@ -42556,6 +44230,9 @@ class Volatile {
      * @throws Exception
      */
     public static function from(stdClass $obj): Volatile {
+        if (!property_exists($obj, 'volatile')) {
+            throw new Exception("Missing required property");
+        }
         return new Volatile(
          Volatile::fromVolatile($obj->{'volatile'})
         );
@@ -42654,6 +44331,9 @@ class WcharT {
      * @throws Exception
      */
     public static function from(stdClass $obj): WcharT {
+        if (!property_exists($obj, 'wchar_t')) {
+            throw new Exception("Missing required property");
+        }
         return new WcharT(
          WcharT::fromWcharT($obj->{'wchar_t'})
         );
@@ -42752,6 +44432,9 @@ class Weak {
      * @throws Exception
      */
     public static function from(stdClass $obj): Weak {
+        if (!property_exists($obj, 'weak')) {
+            throw new Exception("Missing required property");
+        }
         return new Weak(
          Weak::fromWeak($obj->{'weak'})
         );
@@ -42850,6 +44533,9 @@ class Where {
      * @throws Exception
      */
     public static function from(stdClass $obj): Where {
+        if (!property_exists($obj, 'where')) {
+            throw new Exception("Missing required property");
+        }
         return new Where(
          Where::fromWhere($obj->{'where'})
         );
@@ -42948,6 +44634,9 @@ class WhileClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): WhileClass {
+        if (!property_exists($obj, 'while')) {
+            throw new Exception("Missing required property");
+        }
         return new WhileClass(
          WhileClass::fromWhile($obj->{'while'})
         );
@@ -43046,6 +44735,9 @@ class WillSet {
      * @throws Exception
      */
     public static function from(stdClass $obj): WillSet {
+        if (!property_exists($obj, 'willSet')) {
+            throw new Exception("Missing required property");
+        }
         return new WillSet(
          WillSet::fromWillSet($obj->{'willSet'})
         );
@@ -43144,6 +44836,9 @@ class With {
      * @throws Exception
      */
     public static function from(stdClass $obj): With {
+        if (!property_exists($obj, 'with')) {
+            throw new Exception("Missing required property");
+        }
         return new With(
          With::fromWith($obj->{'with'})
         );
@@ -43242,6 +44937,9 @@ class XorClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): XorClass {
+        if (!property_exists($obj, 'xor')) {
+            throw new Exception("Missing required property");
+        }
         return new XorClass(
          XorClass::fromXor($obj->{'xor'})
         );
@@ -43340,6 +45038,9 @@ class XorEq {
      * @throws Exception
      */
     public static function from(stdClass $obj): XorEq {
+        if (!property_exists($obj, 'xor_eq')) {
+            throw new Exception("Missing required property");
+        }
         return new XorEq(
          XorEq::fromXorEq($obj->{'xor_eq'})
         );
@@ -43438,6 +45139,9 @@ class Yes {
      * @throws Exception
      */
     public static function from(stdClass $obj): Yes {
+        if (!property_exists($obj, 'YES')) {
+            throw new Exception("Missing required property");
+        }
         return new Yes(
          Yes::fromYes($obj->{'YES'})
         );
@@ -43536,6 +45240,9 @@ class YieldClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): YieldClass {
+        if (!property_exists($obj, 'yield')) {
+            throw new Exception("Missing required property");
+        }
         return new YieldClass(
          YieldClass::fromYield($obj->{'yield'})
         );
diff --git a/base/php/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.php b/head/php/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.php
index 78c655f..6a347a2 100644
--- a/base/php/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/kotlin-enum-class-case-collision.json/default/TopLevel.php
@@ -85,6 +85,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'category')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCategory($obj->{'category'})
         );
diff --git a/base/php/test/inputs/json/priority/list.json/default/TopLevel.php b/head/php/test/inputs/json/priority/list.json/default/TopLevel.php
index e80c11f..83afae8 100644
--- a/base/php/test/inputs/json/priority/list.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/list.json/default/TopLevel.php
@@ -147,6 +147,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'next')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromNext($obj->{'next'})
diff --git a/base/php/test/inputs/json/priority/name-style.json/default/TopLevel.php b/head/php/test/inputs/json/priority/name-style.json/default/TopLevel.php
index f0a8931..f48b7be 100644
--- a/base/php/test/inputs/json/priority/name-style.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/name-style.json/default/TopLevel.php
@@ -396,6 +396,27 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'anEasyOne')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'isMNISTLetter')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'JSONString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'PrettyEasyToo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'should_know_that_id_is_an_initialism')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '   spaces are separators  too  ')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ZSR_HH_DEMO3_DELMATNR')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromAnEasyOne($obj->{'anEasyOne'})
         ,TopLevel::fromIsMNISTLetter($obj->{'isMNISTLetter'})
diff --git a/base/php/test/inputs/json/priority/nbl-stats.json/default/TopLevel.php b/head/php/test/inputs/json/priority/nbl-stats.json/default/TopLevel.php
index e089506..cadfb4c 100644
--- a/base/php/test/inputs/json/priority/nbl-stats.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/nbl-stats.json/default/TopLevel.php
@@ -1193,6 +1193,66 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'attendance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'clock')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'disableMatch')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'inOT')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'leaddata')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'officials_referee1')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'officials_referee2')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'officials_referee3')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'othermatches')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pbp')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'period')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'periodLengthOVERTIME')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'periodLengthREGULAR')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'periodType')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'periodsMax')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scorers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'timeline')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tm')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'totalTimeAdded')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'totallds')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromAttendance($obj->{'attendance'})
         ,TopLevel::fromClock($obj->{'clock'})
@@ -1913,6 +1973,39 @@ class Othermatch {
      * @throws Exception
      */
     public static function from(stdClass $obj): Othermatch {
+        if (!property_exists($obj, 'clock')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'competitionName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'period')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'periodType')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'team1')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'team1Name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'team1Score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'team2')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'team2Name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'team2Score')) {
+            throw new Exception("Missing required property");
+        }
         return new Othermatch(
          Othermatch::fromClock($obj->{'clock'})
         ,Othermatch::fromCompetitionName($obj->{'competitionName'})
@@ -2232,6 +2325,18 @@ class Team {
      * @throws Exception
      */
     public static function from(stdClass $obj): Team {
+        if (!property_exists($obj, 'teamCode')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'teamCodeInternational')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'teamName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'teamNameInternational')) {
+            throw new Exception("Missing required property");
+        }
         return new Team(
          Team::fromTeamCode($obj->{'teamCode'})
         ,Team::fromTeamCodeInternational($obj->{'teamCodeInternational'})
@@ -3629,6 +3734,51 @@ class Pbp {
      * @throws Exception
      */
     public static function from(stdClass $obj): Pbp {
+        if (!property_exists($obj, 'actionType')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lead')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'period')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'periodType')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'player')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pno')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'qualifier')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 's1')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 's2')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scoring')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'shirtNumber')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subType')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'success')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tno')) {
+            throw new Exception("Missing required property");
+        }
         return new Pbp(
          Pbp::fromActionType($obj->{'actionType'})
         ,Pbp::fromFamilyName($obj->{'familyName'})
@@ -5297,6 +5447,15 @@ class Scorer {
      * @throws Exception
      */
     public static function from(stdClass $obj): Scorer {
+        if (!property_exists($obj, 'pno')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'shirtNumber')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tno')) {
+            throw new Exception("Missing required property");
+        }
         return new Scorer(
          Scorer::fromFamilyName($obj->{'familyName'})
         ,Scorer::fromFamilyNameInitial($obj->{'familyNameInitial'})
@@ -5538,6 +5697,15 @@ class Time {
      * @throws Exception
      */
     public static function from(stdClass $obj): Time {
+        if (!property_exists($obj, 'gt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'per')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'perType')) {
+            throw new Exception("Missing required property");
+        }
         return new Time(
          Time::fromGt($obj->{'gt'})
         ,Time::fromPer($obj->{'per'})
@@ -9008,6 +9176,201 @@ class Tm {
      * @throws Exception
      */
     public static function from(stdClass $obj): Tm {
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'codeInternational')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fouls')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'full_score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lds')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'logo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nameInternational')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'p1_score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'p2_score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'p3_score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'p4_score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pl')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'scoring')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'shortName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'shortNameInternational')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'shot')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'timeouts')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_eff_1')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_eff_2')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_eff_3')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_eff_4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_eff_5')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_eff_6')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_eff_7')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sAssists')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sBenchPoints')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sBiggestLead')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sBiggestScoringRun')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sBlocks')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sBlocksReceived')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sFieldGoalsAttempted')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sFieldGoalsMade')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sFieldGoalsPercentage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sFoulsOn')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sFoulsPersonal')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sFoulsTeam')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sFreeThrowsAttempted')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sFreeThrowsMade')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sFreeThrowsPercentage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sLeadChanges')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sMinutes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sPoints')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sPointsFastBreak')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sPointsFromTurnovers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sPointsInThePaint')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sPointsSecondChance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sReboundsDefensive')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sReboundsOffensive')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sReboundsTeam')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sReboundsTeamDefensive')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sReboundsTeamOffensive')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sReboundsTotal')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sSteals')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sThreePointersAttempted')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sThreePointersMade')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sThreePointersPercentage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sTimeLeading')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sTimesScoresLevel')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sTurnovers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sTurnoversTeam')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sTwoPointersAttempted')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sTwoPointersMade')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tot_sTwoPointersPercentage')) {
+            throw new Exception("Missing required property");
+        }
         return new Tm(
          Tm::fromCode($obj->{'code'})
         ,Tm::fromCodeInternational($obj->{'codeInternational'})
@@ -9503,6 +9866,21 @@ class Lds {
      * @throws Exception
      */
     public static function from(stdClass $obj): Lds {
+        if (!property_exists($obj, 'sAssists')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sBlocks')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sPoints')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sReboundsTotal')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sSteals')) {
+            throw new Exception("Missing required property");
+        }
         return new Lds(
          Lds::fromSAssists($obj->{'sAssists'})
         ,Lds::fromSBlocks($obj->{'sBlocks'})
@@ -9610,6 +9988,9 @@ class SBlocks {
      * @throws Exception
      */
     public static function from(stdClass $obj): SBlocks {
+        if (!property_exists($obj, '1')) {
+            throw new Exception("Missing required property");
+        }
         return new SBlocks(
          SBlocks::fromThe1($obj->{'1'})
         );
@@ -12304,6 +12685,150 @@ class Pl {
      * @throws Exception
      */
     public static function from(stdClass $obj): Pl {
+        if (!property_exists($obj, 'active')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'eff_1')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'eff_2')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'eff_3')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'eff_4')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'eff_5')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'eff_6')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'eff_7')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'familyName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'familyNameInitial')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'firstName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'firstNameInitial')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'internationalFamilyName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'internationalFamilyNameInitial')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'internationalFirstName')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'internationalFirstNameInitial')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'playingPosition')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sAssists')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sBlocks')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sBlocksReceived')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sFieldGoalsAttempted')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sFieldGoalsMade')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sFieldGoalsPercentage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sFoulsOn')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sFoulsPersonal')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sFreeThrowsAttempted')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sFreeThrowsMade')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sFreeThrowsPercentage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sMinutes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sPlusMinusPoints')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sPoints')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sPointsFastBreak')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sPointsInThePaint')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sPointsSecondChance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sReboundsDefensive')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sReboundsOffensive')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sReboundsTotal')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sSteals')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sThreePointersAttempted')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sThreePointersMade')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sThreePointersPercentage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sTurnovers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sTwoPointersAttempted')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sTwoPointersMade')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sTwoPointersPercentage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'shirtNumber')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'starter')) {
+            throw new Exception("Missing required property");
+        }
         return new Pl(
          Pl::fromActive($obj->{'active'})
         ,Pl::fromCaptain($obj->{'captain'})
@@ -12656,6 +13181,18 @@ class Comp {
      * @throws Exception
      */
     public static function from(stdClass $obj): Comp {
+        if (!property_exists($obj, 'sAssistsAverage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sMinutesAverage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sPointsAverage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sReboundsTotalAverage')) {
+            throw new Exception("Missing required property");
+        }
         return new Comp(
          Comp::fromSAssistsAverage($obj->{'sAssistsAverage'})
         ,Comp::fromSMinutesAverage($obj->{'sMinutesAverage'})
@@ -13335,6 +13872,42 @@ class Shot {
      * @throws Exception
      */
     public static function from(stdClass $obj): Shot {
+        if (!property_exists($obj, 'actionType')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'p')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'per')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'perType')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'player')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pno')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'r')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'shirtNumber')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subType')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tno')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'x')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y')) {
+            throw new Exception("Missing required property");
+        }
         return new Shot(
          Shot::fromActionType($obj->{'actionType'})
         ,Shot::fromP($obj->{'p'})
@@ -13791,6 +14364,21 @@ class Totallds {
      * @throws Exception
      */
     public static function from(stdClass $obj): Totallds {
+        if (!property_exists($obj, 'sAssists')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sBlocks')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sPoints')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sReboundsTotal')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sSteals')) {
+            throw new Exception("Missing required property");
+        }
         return new Totallds(
          Totallds::fromSAssists($obj->{'sAssists'})
         ,Totallds::fromSBlocks($obj->{'sBlocks'})
diff --git a/base/php/test/inputs/json/priority/nested-objects.json/default/TopLevel.php b/head/php/test/inputs/json/priority/nested-objects.json/default/TopLevel.php
index 5484d17..4728d98 100644
--- a/base/php/test/inputs/json/priority/nested-objects.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/nested-objects.json/default/TopLevel.php
@@ -170,6 +170,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'a')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'b')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromA($obj->{'a'})
         ,TopLevel::fromB($obj->{'b'})
diff --git a/base/php/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.php b/head/php/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.php
index c9c4ab8..7bd6cae 100644
--- a/base/php/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/nst-test-suite.json/default/TopLevel.php
@@ -5977,6 +5977,285 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'y_number_0e1.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_array_arraysWithSpaces.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_array_empty.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_array_empty-string.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_array_ending_with_newline.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_array_false.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_array_heterogeneous.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_array_null.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_array_with_1_and_newline.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_array_with_leading_space.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_array_with_several_null.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_array_with_trailing_space.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_number_0e+1.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_number_after_space.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_number_double_close_to_zero.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_number_int_with_exp.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_number.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_number_minus_zero.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_number_negative_int.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_number_negative_one.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_number_negative_zero.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_number_real_capital_e.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_number_real_capital_e_neg_exp.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_number_real_capital_e_pos_exp.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_number_real_exponent.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_number_real_fraction_exponent.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_number_real_neg_exp.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_number_real_pos_exponent.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_number_simple_int.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_number_simple_real.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_object_basic.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_object_empty.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_object_empty_key.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_object_escaped_null_in_key.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_object_extreme_numbers.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_object.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_object_long_strings.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_object_simple.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_object_string_unicode.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_object_with_newlines.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_1_2_3_bytes_UTF-8_sequences.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_accepted_surrogate_pair.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_accepted_surrogate_pairs.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_allowed_escapes.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_backslash_and_u_escaped_zero.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_backslash_doublequotes.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_comments.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_double_escape_a.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_double_escape_n.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_escaped_control_character.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_escaped_noncharacter.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_in_array.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_in_array_with_leading_space.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_last_surrogates_1_and_2.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_nbsp_uescaped.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_nonCharacterInUTF-8_U+10FFFF.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_nonCharacterInUTF-8_U+1FFFF.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_nonCharacterInUTF-8_U+FFFF.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_null_escape.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_one-byte-utf-8.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_pi.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_simple_ascii.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_space.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_surrogates_U+1D11E_MUSICAL_SYMBOL_G_CLEF.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_three-byte-utf-8.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_two-byte-utf-8.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_u+2028_line_sep.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_u+2029_par_sep.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_uEscape.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_uescaped_newline.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_unescaped_char_delete.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_unicode_2.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_unicodeEscapedBackslash.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_unicode_escaped_double_quote.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_unicode.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_unicode_U+10FFFE_nonchar.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_unicode_U+1FFFE_nonchar.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_unicode_U+200B_ZERO_WIDTH_SPACE.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_unicode_U+2064_invisible_plus.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_unicode_U+FDD0_nonchar.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_unicode_U+FFFE_nonchar.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_utf8.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_string_with_del_character.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_structure_lonely_false.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_structure_lonely_int.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_structure_lonely_negative_real.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_structure_lonely_null.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_structure_lonely_string.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_structure_lonely_true.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_structure_string_empty.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_structure_trailing_newline.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_structure_true_in_array.json')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y_structure_whitespace_array.json')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromTopLevelYNumber0E1JSON($obj->{'y_number_0e1.json'})
         ,TopLevel::fromYArrayArraysWithSpacesJSON($obj->{'y_array_arraysWithSpaces.json'})
@@ -6304,6 +6583,9 @@ class YObjectBasicJSON {
      * @throws Exception
      */
     public static function from(stdClass $obj): YObjectBasicJSON {
+        if (!property_exists($obj, 'asd')) {
+            throw new Exception("Missing required property");
+        }
         return new YObjectBasicJSON(
          YObjectBasicJSON::fromAsd($obj->{'asd'})
         );
@@ -6402,6 +6684,9 @@ class YObjectEmptyKeyJSON {
      * @throws Exception
      */
     public static function from(stdClass $obj): YObjectEmptyKeyJSON {
+        if (!property_exists($obj, '')) {
+            throw new Exception("Missing required property");
+        }
         return new YObjectEmptyKeyJSON(
          YObjectEmptyKeyJSON::fromEmpty($obj->{''})
         );
@@ -6500,6 +6785,9 @@ class YObjectEscapedNullInKeyJSON {
      * @throws Exception
      */
     public static function from(stdClass $obj): YObjectEscapedNullInKeyJSON {
+        if (!property_exists($obj, 'foo bar')) {
+            throw new Exception("Missing required property");
+        }
         return new YObjectEscapedNullInKeyJSON(
          YObjectEscapedNullInKeyJSON::fromFooBar($obj->{'foo bar'})
         );
@@ -6650,6 +6938,12 @@ class YObjectExtremeNumbersJSON {
      * @throws Exception
      */
     public static function from(stdClass $obj): YObjectExtremeNumbersJSON {
+        if (!property_exists($obj, 'max')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'min')) {
+            throw new Exception("Missing required property");
+        }
         return new YObjectExtremeNumbersJSON(
          YObjectExtremeNumbersJSON::fromMax($obj->{'max'})
         ,YObjectExtremeNumbersJSON::fromMin($obj->{'min'})
@@ -6802,6 +7096,12 @@ class YObjectJSON {
      * @throws Exception
      */
     public static function from(stdClass $obj): YObjectJSON {
+        if (!property_exists($obj, 'asd')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'dfg')) {
+            throw new Exception("Missing required property");
+        }
         return new YObjectJSON(
          YObjectJSON::fromAsd($obj->{'asd'})
         ,YObjectJSON::fromDfg($obj->{'dfg'})
@@ -6966,6 +7266,12 @@ class YObjectLongStringsJSON {
      * @throws Exception
      */
     public static function from(stdClass $obj): YObjectLongStringsJSON {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'x')) {
+            throw new Exception("Missing required property");
+        }
         return new YObjectLongStringsJSON(
          YObjectLongStringsJSON::fromID($obj->{'id'})
         ,YObjectLongStringsJSON::fromX($obj->{'x'})
@@ -7066,6 +7372,9 @@ class X {
      * @throws Exception
      */
     public static function from(stdClass $obj): X {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
         return new X(
          X::fromID($obj->{'id'})
         );
@@ -7175,6 +7484,9 @@ class YObjectSimpleJSON {
      * @throws Exception
      */
     public static function from(stdClass $obj): YObjectSimpleJSON {
+        if (!property_exists($obj, 'a')) {
+            throw new Exception("Missing required property");
+        }
         return new YObjectSimpleJSON(
          YObjectSimpleJSON::fromA($obj->{'a'})
         );
@@ -7273,6 +7585,9 @@ class YObjectStringUnicodeJSON {
      * @throws Exception
      */
     public static function from(stdClass $obj): YObjectStringUnicodeJSON {
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
         return new YObjectStringUnicodeJSON(
          YObjectStringUnicodeJSON::fromTitle($obj->{'title'})
         );
@@ -7371,6 +7686,9 @@ class YObjectWithNewlinesJSON {
      * @throws Exception
      */
     public static function from(stdClass $obj): YObjectWithNewlinesJSON {
+        if (!property_exists($obj, 'a')) {
+            throw new Exception("Missing required property");
+        }
         return new YObjectWithNewlinesJSON(
          YObjectWithNewlinesJSON::fromA($obj->{'a'})
         );
diff --git a/base/php/test/inputs/json/priority/number-map.json/default/TopLevel.php b/head/php/test/inputs/json/priority/number-map.json/default/TopLevel.php
index 0a5bb3b..944f5b2 100644
--- a/base/php/test/inputs/json/priority/number-map.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/number-map.json/default/TopLevel.php
@@ -101,6 +101,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromFoo($obj->{'foo'})
         );
diff --git a/base/php/test/inputs/json/priority/omit-empty.json/default/TopLevel.php b/head/php/test/inputs/json/priority/omit-empty.json/default/TopLevel.php
index 71e7b89..2f9fed6 100644
--- a/base/php/test/inputs/json/priority/omit-empty.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/omit-empty.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'results')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromResults($obj->{'results'})
         );
@@ -249,6 +252,9 @@ class Result {
      * @throws Exception
      */
     public static function from(stdClass $obj): Result {
+        if (!property_exists($obj, 'age')) {
+            throw new Exception("Missing required property");
+        }
         return new Result(
          Result::fromAge($obj->{'age'})
         ,Result::fromName($obj->{'name'})
diff --git a/base/php/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.php b/head/php/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.php
index 97afbd7..1fa35fd 100644
--- a/base/php/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/php-mixed-union.json/default/TopLevel.php
@@ -140,6 +140,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'mixed')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromMixed($obj->{'mixed'})
         );
@@ -238,6 +241,9 @@ class MixedClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): MixedClass {
+        if (!property_exists($obj, 'nested')) {
+            throw new Exception("Missing required property");
+        }
         return new MixedClass(
          MixedClass::fromNested($obj->{'nested'})
         );
diff --git a/base/php/test/inputs/json/priority/php-validation.json/default/TopLevel.php b/head/php/test/inputs/json/priority/php-validation.json/default/TopLevel.php
index 15b9622..be375f8 100644
--- a/base/php/test/inputs/json/priority/php-validation.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/php-validation.json/default/TopLevel.php
@@ -306,6 +306,21 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'boolean')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'integer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'integers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'number')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'string')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBoolean($obj->{'boolean'})
         ,TopLevel::fromInteger($obj->{'integer'})
diff --git a/base/php/test/inputs/json/priority/recursive.json/default/TopLevel.php b/head/php/test/inputs/json/priority/recursive.json/default/TopLevel.php
index c53de39..04b74be 100644
--- a/base/php/test/inputs/json/priority/recursive.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/recursive.json/default/TopLevel.php
@@ -566,6 +566,36 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'category')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'details')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'match')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'page')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'product')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'schk')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'totallooseoffers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'totalpages')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'totalresultsavailable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'totalresultsreturned')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCategory($obj->{'category'})
         ,TopLevel::fromDetails($obj->{'details'})
@@ -1059,6 +1089,30 @@ class Category {
      * @throws Exception
      */
     public static function from(stdClass $obj): Category {
+        if (!property_exists($obj, 'concatenatecategoryname')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hasoffer')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'isfinal')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'links')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'parentcategoryid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail')) {
+            throw new Exception("Missing required property");
+        }
         return new Category(
          Category::fromConcatenatecategoryname($obj->{'concatenatecategoryname'})
         ,Category::fromHasoffer($obj->{'hasoffer'})
@@ -1172,6 +1226,9 @@ class LinkElement {
      * @throws Exception
      */
     public static function from(stdClass $obj): LinkElement {
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
         return new LinkElement(
          LinkElement::fromLink($obj->{'link'})
         );
@@ -1322,6 +1379,12 @@ class LinkLink {
      * @throws Exception
      */
     public static function from(stdClass $obj): LinkLink {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new LinkLink(
          LinkLink::fromType($obj->{'type'})
         ,LinkLink::fromURL($obj->{'url'})
@@ -1422,6 +1485,9 @@ class CategoryThumbnail {
      * @throws Exception
      */
     public static function from(stdClass $obj): CategoryThumbnail {
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new CategoryThumbnail(
          CategoryThumbnail::fromURL($obj->{'url'})
         );
@@ -1833,6 +1899,27 @@ class Details {
      * @throws Exception
      */
     public static function from(stdClass $obj): Details {
+        if (!property_exists($obj, 'applicationid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'applicationversion')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'code')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'elapsedtime')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'message')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'status')) {
+            throw new Exception("Missing required property");
+        }
         return new Details(
          Details::fromApplicationid($obj->{'applicationid'})
         ,Details::fromApplicationversion($obj->{'applicationversion'})
@@ -2465,6 +2552,39 @@ class Date {
      * @throws Exception
      */
     public static function from(stdClass $obj): Date {
+        if (!property_exists($obj, 'day')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'eonandyear')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hour')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'millisecond')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minute')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'month')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'second')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'timezone')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'valid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'xmlschematype')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'year')) {
+            throw new Exception("Missing required property");
+        }
         return new Date(
          Date::fromDay($obj->{'day'})
         ,Date::fromEonandyear($obj->{'eonandyear'})
@@ -2583,6 +2703,9 @@ class Eonandyear {
      * @throws Exception
      */
     public static function from(stdClass $obj): Eonandyear {
+        if (!property_exists($obj, 'lowestsetbit')) {
+            throw new Exception("Missing required property");
+        }
         return new Eonandyear(
          Eonandyear::fromLowestsetbit($obj->{'lowestsetbit'})
         );
@@ -2785,6 +2908,15 @@ class Xmlschematype {
      * @throws Exception
      */
     public static function from(stdClass $obj): Xmlschematype {
+        if (!property_exists($obj, 'localpart')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'namespaceuri')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'prefix')) {
+            throw new Exception("Missing required property");
+        }
         return new Xmlschematype(
          Xmlschematype::fromLocalpart($obj->{'localpart'})
         ,Xmlschematype::fromNamespaceuri($obj->{'namespaceuri'})
@@ -2888,6 +3020,9 @@ class ProductElement {
      * @throws Exception
      */
     public static function from(stdClass $obj): ProductElement {
+        if (!property_exists($obj, 'product')) {
+            throw new Exception("Missing required property");
+        }
         return new ProductElement(
          ProductElement::fromProduct($obj->{'product'})
         );
@@ -3782,6 +3917,54 @@ class ProductProduct {
      * @throws Exception
      */
     public static function from(stdClass $obj): ProductProduct {
+        if (!property_exists($obj, 'categoryid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'currency')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'eco')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fulldescription')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hasmetasearch')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'links')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'numoffers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pricemax')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pricemin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'productname')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'quantity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rating')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'specification')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'totalsellers')) {
+            throw new Exception("Missing required property");
+        }
         return new ProductProduct(
          ProductProduct::fromCategoryid($obj->{'categoryid'})
         ,ProductProduct::fromCurrency($obj->{'currency'})
@@ -3910,6 +4093,9 @@ class Currency {
      * @throws Exception
      */
     public static function from(stdClass $obj): Currency {
+        if (!property_exists($obj, 'abbreviation')) {
+            throw new Exception("Missing required property");
+        }
         return new Currency(
          Currency::fromAbbreviation($obj->{'abbreviation'})
         );
@@ -4009,6 +4195,9 @@ class Rating {
      * @throws Exception
      */
     public static function from(stdClass $obj): Rating {
+        if (!property_exists($obj, 'useraveragerating')) {
+            throw new Exception("Missing required property");
+        }
         return new Rating(
          Rating::fromUseraveragerating($obj->{'useraveragerating'})
         );
@@ -4223,6 +4412,15 @@ class Useraveragerating {
      * @throws Exception
      */
     public static function from(stdClass $obj): Useraveragerating {
+        if (!property_exists($obj, 'links')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'numcomments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rating')) {
+            throw new Exception("Missing required property");
+        }
         return new Useraveragerating(
          Useraveragerating::fromLinks($obj->{'links'})
         ,Useraveragerating::fromNumcomments($obj->{'numcomments'})
@@ -4337,6 +4535,9 @@ class Specification {
      * @throws Exception
      */
     public static function from(stdClass $obj): Specification {
+        if (!property_exists($obj, 'links')) {
+            throw new Exception("Missing required property");
+        }
         return new Specification(
          Specification::fromLinks($obj->{'links'})
         );
@@ -4436,6 +4637,9 @@ class Format {
      * @throws Exception
      */
     public static function from(stdClass $obj): Format {
+        if (!property_exists($obj, 'formats')) {
+            throw new Exception("Missing required property");
+        }
         return new Format(
          Format::fromFormats($obj->{'formats'})
         );
@@ -4712,6 +4916,15 @@ class FormatsClass {
      * @throws Exception
      */
     public static function from(stdClass $obj): FormatsClass {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new FormatsClass(
          FormatsClass::fromFormats($obj->{'formats'})
         ,FormatsClass::fromHeight($obj->{'height'})
diff --git a/base/php/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.php b/head/php/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.php
index 13ad759..260e5c2 100644
--- a/base/php/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/simple-identifiers.json/default/TopLevel.php
@@ -500,6 +500,33 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'continue')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'null')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'x\'')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '{}')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'x"')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'undefined')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'x')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'x y')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromContinue($obj->{'continue'})
         ,TopLevel::fromEmpty($obj->{''})
diff --git a/base/php/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.php b/head/php/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.php
index 82a13ae..1962b1b 100644
--- a/base/php/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/union-constructor-clash.json/default/TopLevel.php
@@ -171,6 +171,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'BoolInUnion')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'union')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBoolInUnion($obj->{'BoolInUnion'})
         ,TopLevel::fromUnion($obj->{'union'})
@@ -271,6 +277,9 @@ class BoolInUnion {
      * @throws Exception
      */
     public static function from(stdClass $obj): BoolInUnion {
+        if (!property_exists($obj, 'a')) {
+            throw new Exception("Missing required property");
+        }
         return new BoolInUnion(
          BoolInUnion::fromA($obj->{'a'})
         );
diff --git a/base/php/test/inputs/json/priority/unions.json/default/TopLevel.php b/head/php/test/inputs/json/priority/unions.json/default/TopLevel.php
index beefc34..1bd1df1 100644
--- a/base/php/test/inputs/json/priority/unions.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/unions.json/default/TopLevel.php
@@ -303,6 +303,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'x')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'y')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'z')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromX($obj->{'x'})
         ,TopLevel::fromY($obj->{'y'})
@@ -405,6 +414,9 @@ class Z {
      * @throws Exception
      */
     public static function from(stdClass $obj): Z {
+        if (!property_exists($obj, 'a')) {
+            throw new Exception("Missing required property");
+        }
         return new Z(
          Z::fromA($obj->{'a'})
         );
diff --git a/base/php/test/inputs/json/priority/url.json/default/TopLevel.php b/head/php/test/inputs/json/priority/url.json/default/TopLevel.php
index f35d1e3..ac3d29a 100644
--- a/base/php/test/inputs/json/priority/url.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/url.json/default/TopLevel.php
@@ -136,6 +136,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'fromURL')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromFromURL($obj->{'fromURL'})
         ,TopLevel::purpleFromURL($obj->{'url'})
diff --git a/base/php/test/inputs/json/priority/uuids.json/default/TopLevel.php b/head/php/test/inputs/json/priority/uuids.json/default/TopLevel.php
index 4aa54cf..dc13920 100644
--- a/base/php/test/inputs/json/priority/uuids.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/priority/uuids.json/default/TopLevel.php
@@ -364,6 +364,24 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'booleanValue')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'doubleValue')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'intValue')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stringValue')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uuidValue')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uuidValues')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBooleanValue($obj->{'booleanValue'})
         ,TopLevel::fromDoubleValue($obj->{'doubleValue'})
diff --git a/base/php/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.php b/head/php/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.php
index f63ed5a..7aae602 100644
--- a/base/php/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/samples/bitcoin-block.json/default/TopLevel.php
@@ -306,6 +306,21 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'block_index')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hash')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'time')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'txIndexes')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBlockIndex($obj->{'block_index'})
         ,TopLevel::fromHash($obj->{'hash'})
diff --git a/base/php/test/inputs/json/samples/getting-started.json/default/TopLevel.php b/head/php/test/inputs/json/samples/getting-started.json/default/TopLevel.php
index 6d15f80..176f39c 100644
--- a/base/php/test/inputs/json/samples/getting-started.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/samples/getting-started.json/default/TopLevel.php
@@ -150,6 +150,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'greeting')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'instructions')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromGreeting($obj->{'greeting'})
         ,TopLevel::fromInstructions($obj->{'instructions'})
diff --git a/base/php/test/inputs/json/samples/github-events.json/default/TopLevel.php b/head/php/test/inputs/json/samples/github-events.json/default/TopLevel.php
index e002c3d..b455ff1 100644
--- a/base/php/test/inputs/json/samples/github-events.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/samples/github-events.json/default/TopLevel.php
@@ -469,6 +469,27 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'actor')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'payload')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'public')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'repo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromActor($obj->{'actor'})
         ,TopLevel::fromCreatedAt($obj->{'created_at'})
@@ -851,6 +872,21 @@ class Actor {
      * @throws Exception
      */
     public static function from(stdClass $obj): Actor {
+        if (!property_exists($obj, 'avatar_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gravatar_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'login')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Actor(
          Actor::fromAvatarURL($obj->{'avatar_url'})
         ,Actor::fromDisplayLogin($obj->{'display_login'})
@@ -2421,6 +2457,30 @@ class Comment {
      * @throws Exception
      */
     public static function from(stdClass $obj): Comment {
+        if (!property_exists($obj, 'body')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'html_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'issue_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'user')) {
+            throw new Exception("Missing required property");
+        }
         return new Comment(
          Comment::fromBody($obj->{'body'})
         ,Comment::fromCreatedAt($obj->{'created_at'})
@@ -3366,6 +3426,57 @@ class User {
      * @throws Exception
      */
     public static function from(stdClass $obj): User {
+        if (!property_exists($obj, 'avatar_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'events_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'followers_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'following_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gists_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gravatar_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'html_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'login')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'organizations_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'received_events_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'repos_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'site_admin')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'starred_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subscriptions_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new User(
          User::fromAvatarURL($obj->{'avatar_url'})
         ,User::fromEventsURL($obj->{'events_url'})
@@ -3754,6 +3865,21 @@ class Commit {
      * @throws Exception
      */
     public static function from(stdClass $obj): Commit {
+        if (!property_exists($obj, 'author')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'distinct')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'message')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sha')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Commit(
          Commit::fromAuthor($obj->{'author'})
         ,Commit::fromDistinct($obj->{'distinct'})
@@ -3912,6 +4038,12 @@ class Author {
      * @throws Exception
      */
     public static function from(stdClass $obj): Author {
+        if (!property_exists($obj, 'email')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new Author(
          Author::fromEmail($obj->{'email'})
         ,Author::fromName($obj->{'name'})
@@ -5184,6 +5316,69 @@ class Issue {
      * @throws Exception
      */
     public static function from(stdClass $obj): Issue {
+        if (!property_exists($obj, 'assignee')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'assignees')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'body')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closed_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'comments_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'events_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'html_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'labels')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'labels_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'milestone')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'number')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'repository_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'user')) {
+            throw new Exception("Missing required property");
+        }
         return new Issue(
          Issue::fromAssignee($obj->{'assignee'})
         ,Issue::fromAssignees($obj->{'assignees'})
@@ -5532,6 +5727,21 @@ class Label {
      * @throws Exception
      */
     public static function from(stdClass $obj): Label {
+        if (!property_exists($obj, 'color')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'default')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Label(
          Label::fromColor($obj->{'color'})
         ,Label::fromDefault($obj->{'default'})
@@ -6401,6 +6611,51 @@ class Milestone {
      * @throws Exception
      */
     public static function from(stdClass $obj): Milestone {
+        if (!property_exists($obj, 'closed_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closed_issues')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'creator')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'due_on')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'html_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'labels_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'number')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'open_issues')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new Milestone(
          Milestone::fromClosedAt($obj->{'closed_at'})
         ,Milestone::fromClosedIssues($obj->{'closed_issues'})
@@ -6683,6 +6938,18 @@ class IssuePullRequest {
      * @throws Exception
      */
     public static function from(stdClass $obj): IssuePullRequest {
+        if (!property_exists($obj, 'diff_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'html_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'patch_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new IssuePullRequest(
          IssuePullRequest::fromDiffURL($obj->{'diff_url'})
         ,IssuePullRequest::fromHTMLURL($obj->{'html_url'})
@@ -8934,6 +9201,129 @@ class PayloadPullRequest {
      * @throws Exception
      */
     public static function from(stdClass $obj): PayloadPullRequest {
+        if (!property_exists($obj, 'additions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'assignee')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'assignees')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'base')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'body')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'changed_files')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'closed_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'comments_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'commits')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'commits_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'deletions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'diff_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'head')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'html_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'issue_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, '_links')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'maintainer_can_modify')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'merge_commit_sha')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mergeable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mergeable_state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'merged')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'merged_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'merged_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'milestone')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'number')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'patch_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rebaseable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'requested_reviewers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'review_comment_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'review_comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'review_comments_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'statuses_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'user')) {
+            throw new Exception("Missing required property");
+        }
         return new PayloadPullRequest(
          PayloadPullRequest::fromAdditions($obj->{'additions'})
         ,PayloadPullRequest::fromAssignee($obj->{'assignee'})
@@ -9322,6 +9712,21 @@ class Base {
      * @throws Exception
      */
     public static function from(stdClass $obj): Base {
+        if (!property_exists($obj, 'label')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ref')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'repo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sha')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'user')) {
+            throw new Exception("Missing required property");
+        }
         return new Base(
          Base::fromLabel($obj->{'label'})
         ,Base::fromRef($obj->{'ref'})
@@ -12989,6 +13394,213 @@ class BaseRepo {
      * @throws Exception
      */
     public static function from(stdClass $obj): BaseRepo {
+        if (!property_exists($obj, 'archive_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'assignees_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'blobs_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'branches_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'clone_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'collaborators_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'comments_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'commits_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'compare_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'contents_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'contributors_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'default_branch')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'deployments_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downloads_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'events_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'fork')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forks')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forks_count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'forks_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'full_name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'git_commits_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'git_refs_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'git_tags_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'git_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'has_downloads')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'has_issues')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'has_pages')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'has_projects')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'has_wiki')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'homepage')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hooks_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'html_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'issue_comment_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'issue_events_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'issues_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'keys_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'labels_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'language')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'languages_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'merges_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'milestones_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mirror_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'notifications_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'open_issues')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'open_issues_count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'owner')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'private')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pulls_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pushed_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'releases_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'size')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ssh_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stargazers_count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stargazers_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'statuses_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subscribers_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subscription_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'svn_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tags_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'teams_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'trees_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'updated_at')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'watchers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'watchers_count')) {
+            throw new Exception("Missing required property");
+        }
         return new BaseRepo(
          BaseRepo::fromArchiveURL($obj->{'archive_url'})
         ,BaseRepo::fromAssigneesURL($obj->{'assignees_url'})
@@ -13595,6 +14207,30 @@ class Links {
      * @throws Exception
      */
     public static function from(stdClass $obj): Links {
+        if (!property_exists($obj, 'comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'commits')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'html')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'issue')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'review_comment')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'review_comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'self')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'statuses')) {
+            throw new Exception("Missing required property");
+        }
         return new Links(
          Links::fromComments($obj->{'comments'})
         ,Links::fromCommits($obj->{'commits'})
@@ -13707,6 +14343,9 @@ class Comments {
      * @throws Exception
      */
     public static function from(stdClass $obj): Comments {
+        if (!property_exists($obj, 'href')) {
+            throw new Exception("Missing required property");
+        }
         return new Comments(
          Comments::fromHref($obj->{'href'})
         );
@@ -13909,6 +14548,15 @@ class TopLevelRepo {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevelRepo {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevelRepo(
          TopLevelRepo::fromID($obj->{'id'})
         ,TopLevelRepo::fromName($obj->{'name'})
diff --git a/base/php/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.php b/head/php/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.php
index cafe273..78f4a6e 100644
--- a/base/php/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.php
@@ -918,6 +918,48 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'booleanValue')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'dateValue')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'differentThings')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'doubleValue')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'intValue')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mapValue')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name with spaces')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nullValue')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nullableMapValue')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'people')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'person')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stringValue')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tuples')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uuidValue')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBooleanValue($obj->{'booleanValue'})
         ,TopLevel::fromDateValue($obj->{'dateValue'})
@@ -1042,6 +1084,9 @@ class DifferentThing {
      * @throws Exception
      */
     public static function from(stdClass $obj): DifferentThing {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new DifferentThing(
          DifferentThing::fromName($obj->{'name'})
         );
@@ -1277,6 +1322,12 @@ class PersonElement {
      * @throws Exception
      */
     public static function from(stdClass $obj): PersonElement {
+        if (!property_exists($obj, 'intOrString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new PersonElement(
          PersonElement::fromIntOrString($obj->{'intOrString'})
         ,PersonElement::fromName($obj->{'name'})
@@ -1431,6 +1482,12 @@ class PurplePerson {
      * @throws Exception
      */
     public static function from(stdClass $obj): PurplePerson {
+        if (!property_exists($obj, 'intOrString')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new PurplePerson(
          PurplePerson::fromIntOrString($obj->{'intOrString'})
         ,PurplePerson::fromName($obj->{'name'})
diff --git a/base/php/test/inputs/json/samples/null-safe.json/default/TopLevel.php b/head/php/test/inputs/json/samples/null-safe.json/default/TopLevel.php
index 942c876..ad97f86 100644
--- a/base/php/test/inputs/json/samples/null-safe.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/samples/null-safe.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromItem($obj->{'item'})
         );
@@ -388,6 +391,12 @@ class Item {
      * @throws Exception
      */
     public static function from(stdClass $obj): Item {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sex')) {
+            throw new Exception("Missing required property");
+        }
         return new Item(
          Item::fromAddress($obj->{'address'})
         ,Item::fromCreatedAt($obj->{'created_at'})
@@ -596,6 +605,15 @@ class Address {
      * @throws Exception
      */
     public static function from(stdClass $obj): Address {
+        if (!property_exists($obj, 'city')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'country')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'street')) {
+            throw new Exception("Missing required property");
+        }
         return new Address(
          Address::fromCity($obj->{'city'})
         ,Address::fromCountry($obj->{'country'})
diff --git a/base/php/test/inputs/json/samples/pokedex.json/default/TopLevel.php b/head/php/test/inputs/json/samples/pokedex.json/default/TopLevel.php
index bd665af..cd1338d 100644
--- a/base/php/test/inputs/json/samples/pokedex.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/samples/pokedex.json/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'pokemon')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromPokemon($obj->{'pokemon'})
         );
@@ -1129,6 +1132,48 @@ class Pokemon {
      * @throws Exception
      */
     public static function from(stdClass $obj): Pokemon {
+        if (!property_exists($obj, 'avg_spawns')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'candy')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'egg')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'img')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'multipliers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'spawn_chance')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'spawn_time')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weaknesses')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'weight')) {
+            throw new Exception("Missing required property");
+        }
         return new Pokemon(
          Pokemon::fromAvgSpawns($obj->{'avg_spawns'})
         ,Pokemon::fromCandy($obj->{'candy'})
@@ -1372,6 +1417,12 @@ class Evolution {
      * @throws Exception
      */
     public static function from(stdClass $obj): Evolution {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num')) {
+            throw new Exception("Missing required property");
+        }
         return new Evolution(
          Evolution::fromName($obj->{'name'})
         ,Evolution::fromNum($obj->{'num'})
diff --git a/base/php/test/inputs/json/samples/reddit.json/default/TopLevel.php b/head/php/test/inputs/json/samples/reddit.json/default/TopLevel.php
index a0a30b7..67f241f 100644
--- a/base/php/test/inputs/json/samples/reddit.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/samples/reddit.json/default/TopLevel.php
@@ -137,6 +137,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromKind($obj->{'kind'})
@@ -408,6 +414,18 @@ class TopLevelData {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevelData {
+        if (!property_exists($obj, 'after')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'before')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'children')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'modhash')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevelData(
          TopLevelData::fromAfter($obj->{'after'})
         ,TopLevelData::fromBefore($obj->{'before'})
@@ -566,6 +584,12 @@ class Child {
      * @throws Exception
      */
     public static function from(stdClass $obj): Child {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new Child(
          Child::fromData($obj->{'data'})
         ,Child::fromKind($obj->{'kind'})
@@ -4168,6 +4192,204 @@ class ChildData {
      * @throws Exception
      */
     public static function from(stdClass $obj): ChildData {
+        if (!property_exists($obj, 'approved_at_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'approved_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'archived')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author_flair_css_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'author_flair_text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banned_at_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'banned_by')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'brand_safe')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'can_gild')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'can_mod_post')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'clicked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'contest_mode')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'created_utc')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'distinguished')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'domain')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'downs')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'edited')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gilded')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hidden')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'hide_score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_self')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'is_video')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'likes')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link_flair_css_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link_flair_text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'locked')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'media')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'media_embed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'mod_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_comments')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'num_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'over_18')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'parent_whitelist_status')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'permalink')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'post_hint')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'quarantine')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'removal_reason')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'report_reasons')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'saved')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'score')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'secure_media')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'secure_media_embed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'selftext')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'selftext_html')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'spoiler')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'stickied')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_name_prefixed')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'subreddit_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'suggested_sort')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'thumbnail_width')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ups')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'user_reports')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'view_count')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'visited')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'whitelist_status')) {
+            throw new Exception("Missing required property");
+        }
         return new ChildData(
          ChildData::fromApprovedAtUTC($obj->{'approved_at_utc'})
         ,ChildData::fromApprovedBy($obj->{'approved_by'})
@@ -4656,6 +4878,12 @@ class Preview {
      * @throws Exception
      */
     public static function from(stdClass $obj): Preview {
+        if (!property_exists($obj, 'enabled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'images')) {
+            throw new Exception("Missing required property");
+        }
         return new Preview(
          Preview::fromEnabled($obj->{'enabled'})
         ,Preview::fromImages($obj->{'images'})
@@ -4926,6 +5154,18 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'resolutions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'variants')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromID($obj->{'id'})
         ,Image::fromResolutions($obj->{'resolutions'})
@@ -5134,6 +5374,15 @@ class Source {
      * @throws Exception
      */
     public static function from(stdClass $obj): Source {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Source(
          Source::fromHeight($obj->{'height'})
         ,Source::fromURL($obj->{'url'})
@@ -5475,6 +5724,12 @@ class GIF {
      * @throws Exception
      */
     public static function from(stdClass $obj): GIF {
+        if (!property_exists($obj, 'resolutions')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'source')) {
+            throw new Exception("Missing required property");
+        }
         return new GIF(
          GIF::fromResolutions($obj->{'resolutions'})
         ,GIF::fromSource($obj->{'source'})
diff --git a/base/php/test/inputs/json/samples/simple-object.json/default/TopLevel.php b/head/php/test/inputs/json/samples/simple-object.json/default/TopLevel.php
index c123876..0da93af 100644
--- a/base/php/test/inputs/json/samples/simple-object.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/samples/simple-object.json/default/TopLevel.php
@@ -188,6 +188,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'validity')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromDate($obj->{'date'})
         ,TopLevel::fromTitle($obj->{'title'})
diff --git a/base/php/test/inputs/json/samples/spotify-album.json/default/TopLevel.php b/head/php/test/inputs/json/samples/spotify-album.json/default/TopLevel.php
index 1552d93..9b27ed5 100644
--- a/base/php/test/inputs/json/samples/spotify-album.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/samples/spotify-album.json/default/TopLevel.php
@@ -980,6 +980,57 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'album_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'artists')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'available_markets')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'copyrights')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'external_ids')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'external_urls')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'genres')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'href')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'images')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'popularity')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'release_date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'release_date_precision')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tracks')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uri')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromAlbumType($obj->{'album_type'})
         ,TopLevel::fromArtists($obj->{'artists'})
@@ -1371,6 +1422,24 @@ class Artist {
      * @throws Exception
      */
     public static function from(stdClass $obj): Artist {
+        if (!property_exists($obj, 'external_urls')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'href')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uri')) {
+            throw new Exception("Missing required property");
+        }
         return new Artist(
          Artist::fromExternalUrls($obj->{'external_urls'})
         ,Artist::fromHref($obj->{'href'})
@@ -1479,6 +1548,9 @@ class ExternalUrls {
      * @throws Exception
      */
     public static function from(stdClass $obj): ExternalUrls {
+        if (!property_exists($obj, 'spotify')) {
+            throw new Exception("Missing required property");
+        }
         return new ExternalUrls(
          ExternalUrls::fromSpotify($obj->{'spotify'})
         );
@@ -1629,6 +1701,12 @@ class Copyright {
      * @throws Exception
      */
     public static function from(stdClass $obj): Copyright {
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new Copyright(
          Copyright::fromText($obj->{'text'})
         ,Copyright::fromType($obj->{'type'})
@@ -1729,6 +1807,9 @@ class ExternalIDS {
      * @throws Exception
      */
     public static function from(stdClass $obj): ExternalIDS {
+        if (!property_exists($obj, 'upc')) {
+            throw new Exception("Missing required property");
+        }
         return new ExternalIDS(
          ExternalIDS::fromUpc($obj->{'upc'})
         );
@@ -1931,6 +2012,15 @@ class Image {
      * @throws Exception
      */
     public static function from(stdClass $obj): Image {
+        if (!property_exists($obj, 'height')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'width')) {
+            throw new Exception("Missing required property");
+        }
         return new Image(
          Image::fromHeight($obj->{'height'})
         ,Image::fromURL($obj->{'url'})
@@ -2363,6 +2453,27 @@ class Tracks {
      * @throws Exception
      */
     public static function from(stdClass $obj): Tracks {
+        if (!property_exists($obj, 'href')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'items')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'limit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'next')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'offset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'previous')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total')) {
+            throw new Exception("Missing required property");
+        }
         return new Tracks(
          Tracks::fromHref($obj->{'href'})
         ,Tracks::fromItems($obj->{'items'})
@@ -3124,6 +3235,45 @@ class Item {
      * @throws Exception
      */
     public static function from(stdClass $obj): Item {
+        if (!property_exists($obj, 'artists')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'available_markets')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'disc_number')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'duration_ms')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'explicit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'external_urls')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'href')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'preview_url')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'track_number')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'uri')) {
+            throw new Exception("Missing required property");
+        }
         return new Item(
          Item::fromArtists($obj->{'artists'})
         ,Item::fromAvailableMarkets($obj->{'available_markets'})
diff --git a/base/php/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.php b/head/php/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.php
index bf3c1bc..5e950d6 100644
--- a/base/php/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/samples/us-avg-temperatures.json/default/TopLevel.php
@@ -152,6 +152,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromData($obj->{'data'})
         ,TopLevel::fromDescription($obj->{'description'})
@@ -304,6 +310,12 @@ class Datum {
      * @throws Exception
      */
     public static function from(stdClass $obj): Datum {
+        if (!property_exists($obj, 'anomaly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'value')) {
+            throw new Exception("Missing required property");
+        }
         return new Datum(
          Datum::fromAnomaly($obj->{'anomaly'})
         ,Datum::fromValue($obj->{'value'})
@@ -560,6 +572,18 @@ class Description {
      * @throws Exception
      */
     public static function from(stdClass $obj): Description {
+        if (!property_exists($obj, 'base_period')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'missing')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'units')) {
+            throw new Exception("Missing required property");
+        }
         return new Description(
          Description::fromBasePeriod($obj->{'base_period'})
         ,Description::fromMissing($obj->{'missing'})
diff --git a/base/php/test/inputs/json/samples/us-senators.json/default/TopLevel.php b/head/php/test/inputs/json/samples/us-senators.json/default/TopLevel.php
index 5826c84..ffcd46c 100644
--- a/base/php/test/inputs/json/samples/us-senators.json/default/TopLevel.php
+++ b/head/php/test/inputs/json/samples/us-senators.json/default/TopLevel.php
@@ -149,6 +149,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'meta')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'objects')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromMeta($obj->{'meta'})
         ,TopLevel::fromObjects($obj->{'objects'})
@@ -353,6 +359,15 @@ class Meta {
      * @throws Exception
      */
     public static function from(stdClass $obj): Meta {
+        if (!property_exists($obj, 'limit')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'offset')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'total_count')) {
+            throw new Exception("Missing required property");
+        }
         return new Meta(
          Meta::fromLimit($obj->{'limit'})
         ,Meta::fromOffset($obj->{'offset'})
@@ -1596,6 +1611,72 @@ class ObjectElement {
      * @throws Exception
      */
     public static function from(stdClass $obj): ObjectElement {
+        if (!property_exists($obj, 'caucus')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'congress_numbers')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'current')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'description')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'district')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'enddate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'extra')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'leadership_title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'party')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'person')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'phone')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'role_type')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'role_type_label')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'senator_class')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'senator_class_label')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'senator_rank')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'senator_rank_label')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'startdate')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'state')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'title_long')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'website')) {
+            throw new Exception("Missing required property");
+        }
         return new ObjectElement(
          ObjectElement::fromCaucus($obj->{'caucus'})
         ,ObjectElement::fromCongressNumbers($obj->{'congress_numbers'})
@@ -2017,6 +2098,15 @@ class Extra {
      * @throws Exception
      */
     public static function from(stdClass $obj): Extra {
+        if (!property_exists($obj, 'address')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'contact_form')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'office')) {
+            throw new Exception("Missing required property");
+        }
         return new Extra(
          Extra::fromAddress($obj->{'address'})
         ,Extra::fromContactForm($obj->{'contact_form'})
@@ -2978,6 +3068,57 @@ class Person {
      * @throws Exception
      */
     public static function from(stdClass $obj): Person {
+        if (!property_exists($obj, 'bioguideid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'birthday')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'cspanid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'firstname')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gender')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'gender_label')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'lastname')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'link')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'middlename')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'namemod')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'nickname')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'osid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pvsid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'sortname')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'twitterid')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'youtubeid')) {
+            throw new Exception("Missing required property");
+        }
         return new Person(
          Person::fromBioguideid($obj->{'bioguideid'})
         ,Person::fromBirthday($obj->{'birthday'})
diff --git a/base/schema-php/test/inputs/schema/accessors.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/accessors.schema/default/TopLevel.php
index 7b17a54..c96fe67 100644
--- a/base/schema-php/test/inputs/schema/accessors.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/accessors.schema/default/TopLevel.php
@@ -264,6 +264,18 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'bar')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'enum')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'union')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBarre($obj->{'bar'})
         ,TopLevel::fromEnumerification($obj->{'enum'})
diff --git a/base/schema-php/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.php
index 76426e3..ffe5c67 100644
--- a/base/schema-php/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.php
@@ -252,6 +252,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'amount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'frequency')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromAmount($obj->{'amount'})
         ,TopLevel::fromFrequency($obj->{'frequency'})
diff --git a/base/schema-php/test/inputs/schema/any.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/any.schema/default/TopLevel.php
index 3a6a13f..820caf8 100644
--- a/base/schema-php/test/inputs/schema/any.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/any.schema/default/TopLevel.php
@@ -150,6 +150,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'values')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromFoo($obj->{'foo'})
         ,TopLevel::fromValues($obj->{'values'})
diff --git a/base/schema-php/test/inputs/schema/bool-string.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/bool-string.schema/default/TopLevel.php
index c782f59..9223c72 100644
--- a/base/schema-php/test/inputs/schema/bool-string.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/bool-string.schema/default/TopLevel.php
@@ -520,6 +520,18 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'nullable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'one')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unionWithBool')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unionWithBoolAndEnum')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromArrNullable($obj->{'arrNullable'})
         ,TopLevel::fromArrOne($obj->{'arrOne'})
diff --git a/base/schema-php/test/inputs/schema/boolean-subschema.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/boolean-subschema.schema/default/TopLevel.php
index 07db69a..08a81f7 100644
--- a/base/schema-php/test/inputs/schema/boolean-subschema.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/boolean-subschema.schema/default/TopLevel.php
@@ -251,6 +251,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'empty')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromDisallowed($obj->{'disallowed'})
         ,TopLevel::fromEmpty($obj->{'empty'})
diff --git a/base/schema-php/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.php
index ddf0b54..b7f253b 100644
--- a/base/schema-php/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/comment-injection-enum-nested-comment.schema/default/TopLevel.php
@@ -110,6 +110,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromKind($obj->{'kind'})
         );
diff --git a/base/schema-php/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.php
index bc7ea3f..74cbf27 100644
--- a/base/schema-php/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/comment-injection-enum.schema/default/TopLevel.php
@@ -125,6 +125,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromKind($obj->{'kind'})
         );
diff --git a/base/schema-php/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.php
index 8e8f071..f1431db 100644
--- a/base/schema-php/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/comment-injection-nested-comment.schema/default/TopLevel.php
@@ -109,6 +109,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'value')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromValue($obj->{'value'})
         );
diff --git a/base/schema-php/test/inputs/schema/comment-injection.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/comment-injection.schema/default/TopLevel.php
index 1ee01f2..a6e18d4 100644
--- a/base/schema-php/test/inputs/schema/comment-injection.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/comment-injection.schema/default/TopLevel.php
@@ -365,6 +365,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'value')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromTrailingBackslash($obj->{'trailingBackslash'})
         ,TopLevel::fromTrailingQuote($obj->{'trailingQuote'})
diff --git a/base/schema-php/test/inputs/schema/const-non-string.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/const-non-string.schema/default/TopLevel.php
index 2c40360..79d610c 100644
--- a/base/schema-php/test/inputs/schema/const-non-string.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/const-non-string.schema/default/TopLevel.php
@@ -293,6 +293,21 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'amount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'enabled')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'ratio')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'version')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromAmount($obj->{'amount'})
         ,TopLevel::fromEnabled($obj->{'enabled'})
diff --git a/base/schema-php/test/inputs/schema/cut-enum.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/cut-enum.schema/default/TopLevel.php
index b0dab6b..94c3830 100644
--- a/base/schema-php/test/inputs/schema/cut-enum.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/cut-enum.schema/default/TopLevel.php
@@ -84,6 +84,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromFoo($obj->{'foo'})
         );
diff --git a/base/schema-php/test/inputs/schema/date-time-or-string.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/date-time-or-string.schema/default/TopLevel.php
index 3892ca1..304c03c 100644
--- a/base/schema-php/test/inputs/schema/date-time-or-string.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/date-time-or-string.schema/default/TopLevel.php
@@ -161,6 +161,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'bar')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBar($obj->{'bar'})
         ,TopLevel::fromFoo($obj->{'foo'})
diff --git a/base/schema-php/test/inputs/schema/date-time.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/date-time.schema/default/TopLevel.php
index e36479c..fa72b0b 100644
--- a/base/schema-php/test/inputs/schema/date-time.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/date-time.schema/default/TopLevel.php
@@ -357,6 +357,21 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'complex-union-array')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'date-time')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'time')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'union-array')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromComplexUnionArray($obj->{'complex-union-array'})
         ,TopLevel::fromDate($obj->{'date'})
diff --git a/base/schema-php/test/inputs/schema/default-value.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/default-value.schema/default/TopLevel.php
index 257aa0f..a0fb0a1 100644
--- a/base/schema-php/test/inputs/schema/default-value.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/default-value.schema/default/TopLevel.php
@@ -84,6 +84,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'id')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromID($obj->{'id'})
         );
diff --git a/base/schema-php/test/inputs/schema/description.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/description.schema/default/TopLevel.php
index 97c8d1c..c09bf96 100644
--- a/base/schema-php/test/inputs/schema/description.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/description.schema/default/TopLevel.php
@@ -387,6 +387,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'enum')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'object-or-string')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'union')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBar($obj->{'bar'})
         ,TopLevel::fromEnum($obj->{'enum'})
@@ -555,6 +564,9 @@ class ObjectOrString {
      * @throws Exception
      */
     public static function from(stdClass $obj): ObjectOrString {
+        if (!property_exists($obj, 'prop')) {
+            throw new Exception("Missing required property");
+        }
         return new ObjectOrString(
          ObjectOrString::fromProp($obj->{'prop'})
         );
diff --git a/base/schema-php/test/inputs/schema/direct-union.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/direct-union.schema/default/TopLevel.php
index 97a77f3..442ccb2 100644
--- a/base/schema-php/test/inputs/schema/direct-union.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/direct-union.schema/default/TopLevel.php
@@ -99,6 +99,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'stuff')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromStuff($obj->{'stuff'})
         );
@@ -409,6 +412,9 @@ class Thing {
      * @throws Exception
      */
     public static function from(stdClass $obj): Thing {
+        if (!property_exists($obj, 'required')) {
+            throw new Exception("Missing required property");
+        }
         return new Thing(
          Thing::fromOptional($obj->{'optional'})
         ,Thing::fromRequired($obj->{'required'})
diff --git a/base/schema-php/test/inputs/schema/enum-large.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/enum-large.schema/default/TopLevel.php
index 916cb6d..1063881 100644
--- a/base/schema-php/test/inputs/schema/enum-large.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/enum-large.schema/default/TopLevel.php
@@ -138,6 +138,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'callsign')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'priority')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCallsign($obj->{'callsign'})
         ,TopLevel::fromPriority($obj->{'priority'})
diff --git a/base/schema-php/test/inputs/schema/enum-with-null.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/enum-with-null.schema/default/TopLevel.php
index c4fb34f..20bcd75 100644
--- a/base/schema-php/test/inputs/schema/enum-with-null.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/enum-with-null.schema/default/TopLevel.php
@@ -95,6 +95,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'enum')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromEnum($obj->{'enum'})
         );
diff --git a/base/schema-php/test/inputs/schema/enum-with-values.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/enum-with-values.schema/default/TopLevel.php
index d8d9c23..3130a7f 100644
--- a/base/schema-php/test/inputs/schema/enum-with-values.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/enum-with-values.schema/default/TopLevel.php
@@ -85,6 +85,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'weekdays')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromWeekdays($obj->{'weekdays'})
         );
diff --git a/base/schema-php/test/inputs/schema/enum.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/enum.schema/default/TopLevel.php
index 2151f40..a3b4dc5 100644
--- a/base/schema-php/test/inputs/schema/enum.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/enum.schema/default/TopLevel.php
@@ -378,6 +378,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'gve')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromArr($obj->{'arr'})
         ,TopLevel::fromFor($obj->{'for'})
diff --git a/base/schema-php/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.php
index b299627..0629caa 100644
--- a/base/schema-php/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/go-schema-pattern-properties.schema/default/TopLevel.php
@@ -101,6 +101,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'map')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromMap($obj->{'map'})
         );
diff --git a/base/schema-php/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.php
index f38cd14..b66bf8e 100644
--- a/base/schema-php/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/haskell-enum-forbidden.schema/default/TopLevel.php
@@ -85,6 +85,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'health')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromHealth($obj->{'health'})
         );
diff --git a/base/schema-php/test/inputs/schema/id-no-address.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/id-no-address.schema/default/TopLevel.php
index b428061..6deb82a 100644
--- a/base/schema-php/test/inputs/schema/id-no-address.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/id-no-address.schema/default/TopLevel.php
@@ -84,6 +84,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'item')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromItem($obj->{'item'})
         );
diff --git a/base/schema-php/test/inputs/schema/id-root.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/id-root.schema/default/TopLevel.php
index 9b0e033..b2c1ad8 100644
--- a/base/schema-php/test/inputs/schema/id-root.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/id-root.schema/default/TopLevel.php
@@ -84,6 +84,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'bar')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBar($obj->{'bar'})
         );
diff --git a/base/schema-php/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.php
index 1de309a..2aa124f 100644
--- a/base/schema-php/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/ie-suffix-singularization.schema/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'cookies')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCookies($obj->{'cookies'})
         );
@@ -246,6 +249,12 @@ class Cookie {
      * @throws Exception
      */
     public static function from(stdClass $obj): Cookie {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'value')) {
+            throw new Exception("Missing required property");
+        }
         return new Cookie(
          Cookie::fromName($obj->{'name'})
         ,Cookie::fromValue($obj->{'value'})
diff --git a/base/schema-php/test/inputs/schema/implicit-all-of.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/implicit-all-of.schema/default/TopLevel.php
index 7aec42f..f562b2e 100644
--- a/base/schema-php/test/inputs/schema/implicit-all-of.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/implicit-all-of.schema/default/TopLevel.php
@@ -188,6 +188,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bar')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'quux')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromFoo($obj->{'foo'})
         ,TopLevel::fromBar($obj->{'bar'})
diff --git a/base/schema-php/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.php
index 946b289..b2aa0cd 100644
--- a/base/schema-php/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/implicit-class-array-union.schema/default/TopLevel.php
@@ -154,6 +154,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromFoo($obj->{'foo'})
         );
@@ -252,6 +255,9 @@ class Foo {
      * @throws Exception
      */
     public static function from(stdClass $obj): Foo {
+        if (!property_exists($obj, 'bar')) {
+            throw new Exception("Missing required property");
+        }
         return new Foo(
          Foo::fromBar($obj->{'bar'})
         );
diff --git a/base/schema-php/test/inputs/schema/implicit-one-of.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/implicit-one-of.schema/default/TopLevel.php
index 278aa26..926180f 100644
--- a/base/schema-php/test/inputs/schema/implicit-one-of.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/implicit-one-of.schema/default/TopLevel.php
@@ -208,6 +208,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromFoo($obj->{'foo'})
         ,TopLevel::fromBar($obj->{'bar'})
diff --git a/base/schema-php/test/inputs/schema/integer-float-union.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/integer-float-union.schema/default/TopLevel.php
index a33c4f0..6665e1c 100644
--- a/base/schema-php/test/inputs/schema/integer-float-union.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/integer-float-union.schema/default/TopLevel.php
@@ -107,6 +107,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'number')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromNumber($obj->{'number'})
         );
diff --git a/base/schema-php/test/inputs/schema/integer-string.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/integer-string.schema/default/TopLevel.php
index e0e2bb4..e90dd23 100644
--- a/base/schema-php/test/inputs/schema/integer-string.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/integer-string.schema/default/TopLevel.php
@@ -520,6 +520,18 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'nullable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'one')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unionWithInt')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unionWithIntAndEnum')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromArrNullable($obj->{'arrNullable'})
         ,TopLevel::fromArrOne($obj->{'arrOne'})
diff --git a/base/schema-php/test/inputs/schema/integer-type.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/integer-type.schema/default/TopLevel.php
index 83f5b74..f8ced2d 100644
--- a/base/schema-php/test/inputs/schema/integer-type.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/integer-type.schema/default/TopLevel.php
@@ -514,6 +514,33 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'above_i32_max')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'below_i32_min')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'i32_range')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'large_bounds')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'only_maximum')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'only_minimum')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'small_negative')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'small_positive')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unbounded')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromAboveI32Max($obj->{'above_i32_max'})
         ,TopLevel::fromBelowI32Min($obj->{'below_i32_min'})
diff --git a/base/schema-php/test/inputs/schema/intersection.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/intersection.schema/default/TopLevel.php
index 355f2b8..f20bc2a 100644
--- a/base/schema-php/test/inputs/schema/intersection.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/intersection.schema/default/TopLevel.php
@@ -255,6 +255,9 @@ class Intersection {
      * @throws Exception
      */
     public static function from(stdClass $obj): Intersection {
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
         return new Intersection(
          Intersection::fromFoo($obj->{'foo'})
         ,Intersection::fromBar($obj->{'bar'})
diff --git a/base/schema-php/test/inputs/schema/light.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/light.schema/default/TopLevel.php
index 919115d..0d10517 100644
--- a/base/schema-php/test/inputs/schema/light.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/light.schema/default/TopLevel.php
@@ -85,6 +85,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'LightParams')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromLightParams($obj->{'LightParams'})
         );
@@ -287,6 +290,15 @@ class LightParams {
      * @throws Exception
      */
     public static function from(stdClass $obj): LightParams {
+        if (!property_exists($obj, 'app_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'outlet_id')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'rgba')) {
+            throw new Exception("Missing required property");
+        }
         return new LightParams(
          LightParams::fromAppID($obj->{'app_id'})
         ,LightParams::fromOutletID($obj->{'outlet_id'})
diff --git a/base/schema-php/test/inputs/schema/min-max-items.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/min-max-items.schema/default/TopLevel.php
index c075135..7d10a24 100644
--- a/base/schema-php/test/inputs/schema/min-max-items.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/min-max-items.schema/default/TopLevel.php
@@ -387,6 +387,21 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'maxOnly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minAndMax')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minOnly')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'plain')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unionItems')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromMaxOnly($obj->{'maxOnly'})
         ,TopLevel::fromMinAndMax($obj->{'minAndMax'})
diff --git a/base/schema-php/test/inputs/schema/minmax-integer.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/minmax-integer.schema/default/TopLevel.php
index 5d0cff4..c884dec 100644
--- a/base/schema-php/test/inputs/schema/minmax-integer.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/minmax-integer.schema/default/TopLevel.php
@@ -458,6 +458,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'free')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'intersection')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'max')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'min')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minmax')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minMaxIntersection')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minMaxUnion')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'union')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromFree($obj->{'free'})
         ,TopLevel::fromIntersection($obj->{'intersection'})
diff --git a/base/schema-php/test/inputs/schema/minmax.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/minmax.schema/default/TopLevel.php
index 5a923a0..20476a9 100644
--- a/base/schema-php/test/inputs/schema/minmax.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/minmax.schema/default/TopLevel.php
@@ -458,6 +458,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'free')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'intersection')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'max')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'min')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minmax')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minMaxIntersection')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minMaxUnion')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'union')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromFree($obj->{'free'})
         ,TopLevel::fromIntersection($obj->{'intersection'})
diff --git a/base/schema-php/test/inputs/schema/minmaxlength.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/minmaxlength.schema/default/TopLevel.php
index a982d9e..bd1e022 100644
--- a/base/schema-php/test/inputs/schema/minmaxlength.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/minmaxlength.schema/default/TopLevel.php
@@ -507,6 +507,30 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'intersection')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'inUnion')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'maxlength')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minlength')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minMaxIntersection')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minmaxlength')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'minMaxUnion')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'union')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromIntersection($obj->{'intersection'})
         ,TopLevel::fromInUnion($obj->{'inUnion'})
diff --git a/base/schema-php/test/inputs/schema/multi-type-enum.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/multi-type-enum.schema/default/TopLevel.php
index 1912e60..74534af 100644
--- a/base/schema-php/test/inputs/schema/multi-type-enum.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/multi-type-enum.schema/default/TopLevel.php
@@ -121,6 +121,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromFoo($obj->{'foo'})
         );
diff --git a/base/schema-php/test/inputs/schema/mutually-recursive.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/mutually-recursive.schema/default/TopLevel.php
index b8707cc..5037ccf 100644
--- a/base/schema-php/test/inputs/schema/mutually-recursive.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/mutually-recursive.schema/default/TopLevel.php
@@ -112,6 +112,9 @@ class Bar {
      * @throws Exception
      */
     public static function from(stdClass $obj): Bar {
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
         return new Bar(
          Bar::fromFoo($obj->{'foo'})
         );
diff --git a/base/schema-php/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.php
index 3807f68..12698ef 100644
--- a/base/schema-php/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.php
@@ -96,6 +96,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'input')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromInput($obj->{'input'})
         );
diff --git a/base/schema-php/test/inputs/schema/non-standard-ref.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/non-standard-ref.schema/default/TopLevel.php
index 03c9508..ba361e2 100644
--- a/base/schema-php/test/inputs/schema/non-standard-ref.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/non-standard-ref.schema/default/TopLevel.php
@@ -188,6 +188,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'bar')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'quux')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBar($obj->{'bar'})
         ,TopLevel::fromFoo($obj->{'foo'})
diff --git a/base/schema-php/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.php
index 10b116e..b8ae930 100644
--- a/base/schema-php/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/nullable-optional-one-of.schema/default/TopLevel.php
@@ -147,6 +147,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'kind')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromB($obj->{'b'})
         ,TopLevel::fromKind($obj->{'kind'})
diff --git a/base/schema-php/test/inputs/schema/object-type-required.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/object-type-required.schema/default/TopLevel.php
index 0e12c01..434615b 100644
--- a/base/schema-php/test/inputs/schema/object-type-required.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/object-type-required.schema/default/TopLevel.php
@@ -146,6 +146,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromFoo($obj->{'foo'})
         ,TopLevel::fromBar($obj->{'bar'})
diff --git a/base/schema-php/test/inputs/schema/optional-any.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/optional-any.schema/default/TopLevel.php
index 8be2a5d..d0cfe05 100644
--- a/base/schema-php/test/inputs/schema/optional-any.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/optional-any.schema/default/TopLevel.php
@@ -136,6 +136,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'bar')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromBar($obj->{'bar'})
         ,TopLevel::fromFoo($obj->{'foo'})
diff --git a/base/schema-php/test/inputs/schema/optional-const-ref.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/optional-const-ref.schema/default/TopLevel.php
index 4a8e8aa..62f9848 100644
--- a/base/schema-php/test/inputs/schema/optional-const-ref.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/optional-const-ref.schema/default/TopLevel.php
@@ -478,6 +478,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'requiredCoordinates')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'requiredCount')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'requiredLabel')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromCoordinates($obj->{'coordinates'})
         ,TopLevel::fromCount($obj->{'count'})
@@ -640,6 +649,12 @@ class Coordinate {
      * @throws Exception
      */
     public static function from(stdClass $obj): Coordinate {
+        if (!property_exists($obj, 'latitude')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'longitude')) {
+            throw new Exception("Missing required property");
+        }
         return new Coordinate(
          Coordinate::fromLatitude($obj->{'latitude'})
         ,Coordinate::fromLongitude($obj->{'longitude'})
diff --git a/base/schema-php/test/inputs/schema/optional-constraints.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/optional-constraints.schema/default/TopLevel.php
index 9281a8b..17c2482 100644
--- a/base/schema-php/test/inputs/schema/optional-constraints.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/optional-constraints.schema/default/TopLevel.php
@@ -347,6 +347,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'reqZeroMin')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromOptDouble($obj->{'optDouble'})
         ,TopLevel::fromOptInt($obj->{'optInt'})
diff --git a/base/schema-php/test/inputs/schema/optional-date-time.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/optional-date-time.schema/default/TopLevel.php
index 4041d7a..ccab7ff 100644
--- a/base/schema-php/test/inputs/schema/optional-date-time.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/optional-date-time.schema/default/TopLevel.php
@@ -388,6 +388,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'required-date')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'required-date-time')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'required-time')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromOptionalDate($obj->{'optional-date'})
         ,TopLevel::fromOptionalDateTime($obj->{'optional-date-time'})
diff --git a/base/schema-php/test/inputs/schema/optional-enum.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/optional-enum.schema/default/TopLevel.php
index db23dd7..05d37e0 100644
--- a/base/schema-php/test/inputs/schema/optional-enum.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/optional-enum.schema/default/TopLevel.php
@@ -147,6 +147,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromName($obj->{'name'})
         ,TopLevel::fromShortcut($obj->{'shortcut'})
diff --git a/base/schema-php/test/inputs/schema/pattern.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/pattern.schema/default/TopLevel.php
index 2f0f05c..312fa67 100644
--- a/base/schema-php/test/inputs/schema/pattern.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/pattern.schema/default/TopLevel.php
@@ -197,6 +197,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'pattern1')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'pattern2')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'union')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromPattern1($obj->{'pattern1'})
         ,TopLevel::fromPattern2($obj->{'pattern2'})
diff --git a/base/schema-php/test/inputs/schema/prefix-items.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/prefix-items.schema/default/TopLevel.php
index 10ff733..214735f 100644
--- a/base/schema-php/test/inputs/schema/prefix-items.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/prefix-items.schema/default/TopLevel.php
@@ -204,6 +204,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'open')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'tuple')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromOpen($obj->{'open'})
         ,TopLevel::fromTuple($obj->{'tuple'})
diff --git a/base/schema-php/test/inputs/schema/ref-id-files.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/ref-id-files.schema/default/TopLevel.php
index b0dab6b..94c3830 100644
--- a/base/schema-php/test/inputs/schema/ref-id-files.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/ref-id-files.schema/default/TopLevel.php
@@ -84,6 +84,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromFoo($obj->{'foo'})
         );
diff --git a/base/schema-php/test/inputs/schema/required-draft3.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/required-draft3.schema/default/TopLevel.php
index fcab028..8da4834 100644
--- a/base/schema-php/test/inputs/schema/required-draft3.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/required-draft3.schema/default/TopLevel.php
@@ -84,6 +84,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'longitude')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromLongitude($obj->{'longitude'})
         );
diff --git a/base/schema-php/test/inputs/schema/required-non-properties.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/required-non-properties.schema/default/TopLevel.php
index e65d035..c720093 100644
--- a/base/schema-php/test/inputs/schema/required-non-properties.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/required-non-properties.schema/default/TopLevel.php
@@ -136,6 +136,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'bar')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromFoo($obj->{'foo'})
         ,TopLevel::fromBar($obj->{'bar'})
diff --git a/base/schema-php/test/inputs/schema/required.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/required.schema/default/TopLevel.php
index fcab028..8da4834 100644
--- a/base/schema-php/test/inputs/schema/required.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/required.schema/default/TopLevel.php
@@ -84,6 +84,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'longitude')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromLongitude($obj->{'longitude'})
         );
diff --git a/base/schema-php/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.php
index 899c0ef..90a74ba 100644
--- a/base/schema-php/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/rust-cycle-breaker-union.schema/default/TopLevel.php
@@ -165,6 +165,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'value')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromNext($obj->{'next'})
         ,TopLevel::fromValue($obj->{'value'})
@@ -346,6 +349,9 @@ class Node {
      * @throws Exception
      */
     public static function from(stdClass $obj): Node {
+        if (!property_exists($obj, 'value')) {
+            throw new Exception("Missing required property");
+        }
         return new Node(
          Node::fromNext($obj->{'next'})
         ,Node::fromValue($obj->{'value'})
diff --git a/base/schema-php/test/inputs/schema/schema-constraints.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/schema-constraints.schema/default/TopLevel.php
index 63516bd..77e575b 100644
--- a/base/schema-php/test/inputs/schema/schema-constraints.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/schema-constraints.schema/default/TopLevel.php
@@ -144,6 +144,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'minMaxLength')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'percent')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromMinMaxLength($obj->{'minMaxLength'})
         ,TopLevel::fromPercent($obj->{'percent'})
diff --git a/base/schema-php/test/inputs/schema/strict-optional.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/strict-optional.schema/default/TopLevel.php
index 248aa5e..8ed7b7f 100644
--- a/base/schema-php/test/inputs/schema/strict-optional.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/strict-optional.schema/default/TopLevel.php
@@ -94,6 +94,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'foo')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromFoo($obj->{'foo'})
         );
diff --git a/base/schema-php/test/inputs/schema/top-level-array.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/top-level-array.schema/default/TopLevel.php
index 712450c..fd6b70a 100644
--- a/base/schema-php/test/inputs/schema/top-level-array.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/top-level-array.schema/default/TopLevel.php
@@ -136,6 +136,12 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'label')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'score')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromLabel($obj->{'label'})
         ,TopLevel::fromScore($obj->{'score'})
diff --git a/base/schema-php/test/inputs/schema/tuple.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/tuple.schema/default/TopLevel.php
index a7f738c..14ddbe3 100644
--- a/base/schema-php/test/inputs/schema/tuple.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/tuple.schema/default/TopLevel.php
@@ -118,6 +118,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'tuple')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromTuple($obj->{'tuple'})
         );
diff --git a/base/schema-php/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.php
index 195cdbe..f4c96c7 100644
--- a/base/schema-php/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.php
@@ -609,6 +609,12 @@ class Item {
      * @throws Exception
      */
     public static function from(stdClass $obj): Item {
+        if (!property_exists($obj, 'key')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'value')) {
+            throw new Exception("Missing required property");
+        }
         return new Item(
          Item::fromKey($obj->{'key'})
         ,Item::fromValue($obj->{'value'})
diff --git a/base/schema-php/test/inputs/schema/union-int-double.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/union-int-double.schema/default/TopLevel.php
index be79cf8..6644b9d 100644
--- a/base/schema-php/test/inputs/schema/union-int-double.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/union-int-double.schema/default/TopLevel.php
@@ -115,6 +115,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'value')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromValue($obj->{'value'})
         );
diff --git a/base/schema-php/test/inputs/schema/union-list.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/union-list.schema/default/TopLevel.php
index 1defa72..d16d824 100644
--- a/base/schema-php/test/inputs/schema/union-list.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/union-list.schema/default/TopLevel.php
@@ -105,6 +105,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'list')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromList($obj->{'list'})
         );
@@ -224,6 +227,9 @@ class UnionList {
      * @throws Exception
      */
     public static function from(stdClass $obj): UnionList {
+        if (!property_exists($obj, 'next')) {
+            throw new Exception("Missing required property");
+        }
         return new UnionList(
          UnionList::fromNext($obj->{'next'})
         );
diff --git a/base/schema-php/test/inputs/schema/union.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/union.schema/default/TopLevel.php
index 37f94b2..07104db 100644
--- a/base/schema-php/test/inputs/schema/union.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/union.schema/default/TopLevel.php
@@ -208,6 +208,9 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'two')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromOne($obj->{'one'})
         ,TopLevel::fromTwo($obj->{'two'})
diff --git a/base/schema-php/test/inputs/schema/uuid.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/uuid.schema/default/TopLevel.php
index 7031219..fcea39f 100644
--- a/base/schema-php/test/inputs/schema/uuid.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/uuid.schema/default/TopLevel.php
@@ -461,6 +461,15 @@ class TopLevel {
      * @throws Exception
      */
     public static function from(stdClass $obj): TopLevel {
+        if (!property_exists($obj, 'nullable')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'one')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'unionWithEnum')) {
+            throw new Exception("Missing required property");
+        }
         return new TopLevel(
          TopLevel::fromArrNullable($obj->{'arrNullable'})
         ,TopLevel::fromArrOne($obj->{'arrOne'})
diff --git a/base/schema-php/test/inputs/schema/vega-lite.schema/default/TopLevel.php b/head/schema-php/test/inputs/schema/vega-lite.schema/default/TopLevel.php
index f097469..4139d0c 100644
--- a/base/schema-php/test/inputs/schema/vega-lite.schema/default/TopLevel.php
+++ b/head/schema-php/test/inputs/schema/vega-lite.schema/default/TopLevel.php
@@ -29035,6 +29035,9 @@ class VGBinding {
      * @throws Exception
      */
     public static function from(stdClass $obj): VGBinding {
+        if (!property_exists($obj, 'input')) {
+            throw new Exception("Missing required property");
+        }
         return new VGBinding(
          VGBinding::fromElement($obj->{'element'})
         ,VGBinding::fromInput($obj->{'input'})
@@ -43789,6 +43792,9 @@ class ConditionalValueDef {
      * @throws Exception
      */
     public static function from(stdClass $obj): ConditionalValueDef {
+        if (!property_exists($obj, 'value')) {
+            throw new Exception("Missing required property");
+        }
         return new ConditionalValueDef(
          ConditionalValueDef::fromTest($obj->{'test'})
         ,ConditionalValueDef::fromValue($obj->{'value'})
@@ -47410,6 +47416,9 @@ class RepeatRef {
      * @throws Exception
      */
     public static function from(stdClass $obj): RepeatRef {
+        if (!property_exists($obj, 'repeat')) {
+            throw new Exception("Missing required property");
+        }
         return new RepeatRef(
          RepeatRef::fromRepeat($obj->{'repeat'})
         );
@@ -50814,6 +50823,9 @@ class SelectionDomain {
      * @throws Exception
      */
     public static function from(stdClass $obj): SelectionDomain {
+        if (!property_exists($obj, 'selection')) {
+            throw new Exception("Missing required property");
+        }
         return new SelectionDomain(
          SelectionDomain::fromField($obj->{'field'})
         ,SelectionDomain::fromSelection($obj->{'selection'})
@@ -51024,6 +51036,9 @@ class InterpolateParams {
      * @throws Exception
      */
     public static function from(stdClass $obj): InterpolateParams {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new InterpolateParams(
          InterpolateParams::fromGamma($obj->{'gamma'})
         ,InterpolateParams::fromType($obj->{'type'})
@@ -51229,6 +51244,12 @@ class Nice {
      * @throws Exception
      */
     public static function from(stdClass $obj): Nice {
+        if (!property_exists($obj, 'interval')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'step')) {
+            throw new Exception("Missing required property");
+        }
         return new Nice(
          Nice::fromInterval($obj->{'interval'})
         ,Nice::fromStep($obj->{'step'})
@@ -51519,6 +51540,9 @@ class SchemeParams {
      * @throws Exception
      */
     public static function from(stdClass $obj): SchemeParams {
+        if (!property_exists($obj, 'name')) {
+            throw new Exception("Missing required property");
+        }
         return new SchemeParams(
          SchemeParams::fromExtent($obj->{'extent'})
         ,SchemeParams::fromName($obj->{'name'})
@@ -51951,6 +51975,9 @@ class SortField {
      * @throws Exception
      */
     public static function from(stdClass $obj): SortField {
+        if (!property_exists($obj, 'op')) {
+            throw new Exception("Missing required property");
+        }
         return new SortField(
          SortField::fromField($obj->{'field'})
         ,SortField::fromOp($obj->{'op'})
@@ -52780,6 +52807,9 @@ class FacetFieldDef {
      * @throws Exception
      */
     public static function from(stdClass $obj): FacetFieldDef {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new FacetFieldDef(
          FacetFieldDef::fromAggregate($obj->{'aggregate'})
         ,FacetFieldDef::fromBin($obj->{'bin'})
@@ -53712,6 +53742,9 @@ class FieldDef {
      * @throws Exception
      */
     public static function from(stdClass $obj): FieldDef {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new FieldDef(
          FieldDef::fromAggregate($obj->{'aggregate'})
         ,FieldDef::fromBin($obj->{'bin'})
@@ -55992,6 +56025,9 @@ class OrderFieldDef {
      * @throws Exception
      */
     public static function from(stdClass $obj): OrderFieldDef {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new OrderFieldDef(
          OrderFieldDef::fromAggregate($obj->{'aggregate'})
         ,OrderFieldDef::fromBin($obj->{'bin'})
@@ -69109,6 +69145,9 @@ class MarkDef {
      * @throws Exception
      */
     public static function from(stdClass $obj): MarkDef {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new MarkDef(
          MarkDef::fromAlign($obj->{'align'})
         ,MarkDef::fromAngle($obj->{'angle'})
@@ -72940,6 +72979,9 @@ class SelectionDef {
      * @throws Exception
      */
     public static function from(stdClass $obj): SelectionDef {
+        if (!property_exists($obj, 'type')) {
+            throw new Exception("Missing required property");
+        }
         return new SelectionDef(
          SelectionDef::fromBind($obj->{'bind'})
         ,SelectionDef::fromEmpty($obj->{'empty'})
@@ -73510,6 +73552,9 @@ class TitleParams {
      * @throws Exception
      */
     public static function from(stdClass $obj): TitleParams {
+        if (!property_exists($obj, 'text')) {
+            throw new Exception("Missing required property");
+        }
         return new TitleParams(
          TitleParams::fromAnchor($obj->{'anchor'})
         ,TitleParams::fromOffset($obj->{'offset'})
@@ -74832,6 +74877,15 @@ class AggregatedFieldDef {
      * @throws Exception
      */
     public static function from(stdClass $obj): AggregatedFieldDef {
+        if (!property_exists($obj, 'as')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'field')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'op')) {
+            throw new Exception("Missing required property");
+        }
         return new AggregatedFieldDef(
          AggregatedFieldDef::fromAs($obj->{'as'})
         ,AggregatedFieldDef::fromField($obj->{'field'})
@@ -75098,6 +75152,12 @@ class LookupData {
      * @throws Exception
      */
     public static function from(stdClass $obj): LookupData {
+        if (!property_exists($obj, 'data')) {
+            throw new Exception("Missing required property");
+        }
+        if (!property_exists($obj, 'key')) {
+            throw new Exception("Missing required property");
+        }
         return new LookupData(
          LookupData::fromData($obj->{'data'})
         ,LookupData::fromFields($obj->{'fields'})
