.NET Fiddle

CSharp · Console

/Program.cs

using System;
using System.Net;
using System.Text;
using System.IO;
					
public class Program
{
	public static void Main()
	{
		dynamic dynamicString = "{ \"test\" : \"value\" }";
		string json = "{ \"test\" : \"value\" }";
		
		string test = new HttpWebRequestBuilder()
			.SetRequestType()
			//.SetBody(json) //uncomment this and it works
			.SetBody(dynamicString) //uncomment this and it breaks
			.Build()
			.ExtensionMethod();
			
		Console.WriteLine(test);
	}

}

public class HttpWebRequestBuilder
{
	private readonly HttpWebRequest _request;
	
	public HttpWebRequestBuilder() 
	{
		Uri uri = new Uri("http://www.google.com");
		_request = WebRequest.CreateHttp(uri);
	}
	
	public HttpWebRequestBuilder SetRequestType() 
	{
		_request.Method = "POST";
		_request.ContentType = "application/json";
		
		return this;
	}
	
	public HttpWebRequestBuilder SetBody(string json) 
	{
		byte[] bytes = Encoding.UTF8.GetBytes(json);
		_request.ContentLength = bytes.Length;
		
		using (Stream writer = _request.GetRequestStream())
		{
			writer.Write(bytes, 0, bytes.Length);
			writer.Flush();
		}
		
		return this;
	}
	
	public HttpWebRequest Build() 
	{
		return _request;
	}
}

public static class WebRequestExtensions 
{
	public static string ExtensionMethod(this HttpWebRequest webRequest) 
	{
		return "extension method worked";
	}
}
;