If you are a .NET developer and you need to make web services I want you to try ServiceStack right now.
Give me thirty minutes of your time and I will show you a glimpse of the basic features ServiceStack has to offer and how to use them.

Project Setup

Make a Project

Start off by making a new "ASP.NET Empty Web Application" however you feel comfortable.

Within Visual Studio navigate to File ↓ New → Project...

On the left navigate to Templates ↓ Other Project Types ↓ Visual Studio Solutions

Select the Blank Solution template, give it a name, then click the OK button

In your Solution Explorer right click the solution and select Add → New Project...

Reference ServiceStack

Next we need to download and reference ServiceStack. The best way to do this is through NuGet.
If you don't have NuGet (Visual Studio before 2012) you can head over to the NuGet website to get it.
While we are adding ServiceStack lets add ServiceStack.Razor as well, it's neat.

Right click on your web project and select Manage NuGet Packages...

Within the left pane select NuGet official package source under the Online category

Try It

Just run the web application from Visual Studio and you should be presented with a mostly empty metadata page.

Serve Up Some Data

I don't know about your specific scenarios but when I make web services it often involves me taking data from over here and shoving it down some HTTP tubes over there.
ServiceStack makes this workflow really easy.

A Sample Data Store

For this example lets make a model and data store for some food.
It's often a good idea to put your models in another assembly from the API but this is an example so let that slide.
Add the following model and model collection.

Notice how we never assigned a value to Listing. Instead ServiceStack is going to populate that
from the IoC container we worked out previously.

Use It

That is all it takes to make a service. Yes really, check this out!
Run the web project and navigate to the metadata page.
It should look similar to what you saw before but now there is a listing with your new service and the various
formats that it supports.

Click on one of those metadata links like the one for JSON and you should see a nice quick desccription of how to interact with the service.

Unless you are Comic Book Guy this is awesome! Now go make a call to the service: /food .
You get a nice default HTML view of the data, very handy for a quick look at your output. ServiceStack
relies on HTTP header information to determine the right content type. Your browser wants HTML so ServiceStack
complies. You can easily override this, try /food?format=json .

Prettify

While the default HTML representation is nice and the JSON looks good enough you may want to have a bit more control.

JSON Serialization Options

The JSON serialization can be configured easily.
You can set global JSON serialization options within the Configure method of your AppHost class.
As an example here is how to force camel casing:

JsConfig.EmitCamelCaseNames = true;

If you think like I do the mutation of a static property probably gave you a bad feeling.
To make you feel better the configuration class has scoping capabilities too:

Razor Views

Another really cool aspect to ServiceStack is how it manages the serialization of your response message for the client.
Just like with JSON you can configure how HTML is returned when it is requested by the client. ServiceStack has basic
Razor support that can be used to either render response messages or to just make basic Razor pages. Lets make a quick
index page and a details page using Razor.

Add the following line to your AppHost.Configure method to enable Razor. Make sure you installed the Razor NuGet package from before.

Plugins.Add(new RazorFormat()); // add razor and .md functionality

Next lets add the index page that will list out all the food. Add a new file to the project named default.cshtml

Stylish! Now lets make a view for the Food model.
ServiceStack has a convention where Razor views for models should go into the views folder
and they should have the same name as the model they are associated with.