J'ai trouvé que vous n'avez pas du tout besoin du sérialiseur. Si vous renvoyez l'objet sous forme de liste. Permettez-moi d'utiliser un exemple.
Dans notre asmx, nous obtenons les données en utilisant la variable que nous avons transmise
// return data
[WebMethod(CacheDuration = 180)]
public List<latlon> GetData(int id) 
{
    var data = from p in db.property 
               where p.id == id 
               select new latlon
               {
                   lat = p.lat,
                   lon = p.lon
               };
    return data.ToList();
}
public class latlon
{
    public string lat { get; set; }
    public string lon { get; set; }
}
Ensuite, en utilisant jquery, nous accédons au service en transmettant cette variable.
// get latlon
function getlatlon(propertyid) {
var mydata;
$.ajax({
    url: "getData.asmx/GetLatLon",
    type: "POST",
    data: "{'id': '" + propertyid + "'}",
    async: false,
    contentType: "application/json;",
    dataType: "json",
    success: function (data, textStatus, jqXHR) { //
        mydata = data;
    },
    error: function (xmlHttpRequest, textStatus, errorThrown) {
        console.log(xmlHttpRequest.responseText);
        console.log(textStatus);
        console.log(errorThrown);
    }
});
return mydata;
}
// call the function with your data
latlondata = getlatlon(id);
Et nous obtenons notre réponse.
{"d":[{"__type":"MapData+latlon","lat":"40.7031420","lon":"-80.6047970}]}