title: Why is my Web API controller action not deserializing child properties of child properties?
body: <p>I'm sending a json payload in a PUT request to a web API controller action.  The action in question has a signature that looks like this:</p>
  
  <pre><code>public IHttpActionResult Post([FromBody]SaveThingRequest request)
  </code></pre>
  
  <p>SaveThingRequest looks something like this:</p>
  
  <pre><code>public class SaveThingRequest
  {
      public List&lt;ElementInfo&gt; Elements { get; set; }
  
      public class ElementInfo
      {
          public List&lt;ElementSettingInfo&gt; Settings { get; set; }
  
          public class ElementSettingInfo
          {
              public string Name { get; set; }
              public string Value { get; set; }
          }
      }
  }
  </code></pre>
  
  <p>I'm posting json in the body of the request that contains Elements that have Settings.  I've confirmed this by manually deserializing in the controller action and confirming that the JSON has a structure that looks something like:</p>
  
  <pre><code>{
      Elements: [
          {
              Settings: [
                  {
                      Name: 'Name 1',
                      Value: 'Value 1'
                  },
                  {
                      Name: 'Name 2',
                      Value: 'Value 2'
                  }
              ]
          },
          {
              Settings: [
                  {
                      Name: 'Name 1',
                      Value: 'Value 1'
                  },
                  {
                      Name: 'Name 2',
                      Value: 'Value 2'
                  }
              ]
          }
      ]
  }
  </code></pre>
  
  <p>However, when .NET deserializes the payload and creates the SaveThingRequest, my Elements are populated but all of them have a null Settings property.  I don't know how else to troubleshoot this.  Does anyone have any thoughts on what might be going on here?</p>