By default, the "body style" of the attribute is [WebInvoke]"Bare", which means that the input (in your case "data") should be sent "as is". What you send is a wrapped version of the input (i.e., wrapped in an object whose key is the name of the parameter.
: WebInvoke, BodyStyle:
[WebInvoke(
UriTemplate = "Login",
RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.WrappedRequest)]
public string Process(string AuthenticationInfo)
"":
POST .../Login HTTP/1.1
User-Agent: Fiddler
Host: localhost
Content-Type: application/json;charset=utf-8
Content-Length: 6
"data"