title: JSON Post Request Design Pattern not quite SOLID
body: <p>I designed an abstract class that defines a GetJsonRequset and a POstJsonRequest.</p>
  
  <p>My abstract class is defined along with the method signature as follows:</p>
  
  <pre><code>public abstract class RequestBuilder
    {
      protected object GetJsonRequest(string connectionUriString, string queryString, Func&lt;string,object&gt; parseDelegate )
  
      protected object PostJsonRequest(string connectionUriString, string queryString, string inputBody, Func&lt;string,object&gt; parseDelegate )
  
  
  ....
  
  }
  </code></pre>
  
  <p>Now all child classes pass in a delegate as follows.</p>
  
  <pre><code>public class ProjectListBuilder : RequestBuilder
    {
       public ProjectContext Build()
          {
            this.AddRequestHeader("TokenKey", this.authenticationModel.TokenKey);
            if(!string.IsNullOrEmpty(this.page))
            {
              this.AddRequestHeader("Page", this.page);
            }      
            string connectionstring = String.Concat(this.authenticationModel.ServiceBaseUrl, projectURI);
            List&lt;ProjectModel&gt; projectModels = (List&lt;ProjectModel&gt;)GetJsonRequest(connectionstring, string.Empty, Parse);
            return new ProjectContext(this.authenticationModel, this.page, projectModels);
          }
          /// &lt;summary&gt;
          /// delegate used to parse resonse from server. Converts Json from server to strongly type object.
          /// &lt;/summary&gt;
          /// &lt;param name="json"&gt;&lt;/param&gt;
          /// &lt;returns&gt;&lt;/returns&gt;
          public List&lt;ProjectModel&gt; Parse(string json)
          {
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(List&lt;ProjectModel&gt;));
            using(MemoryStream stream = new MemoryStream(Encoding.Unicode.GetBytes(json)))
            {
              return (List&lt;ProjectModel&gt;)serializer.ReadObject(stream);
            }      
          }
  }
  </code></pre>
  
  <p>This works and is fine for a first pass, but it has a weird smell to it. How can i re-factor this to meet a more SOLID design?</p>