Pregunta

MyObject myObject = new myObject (); myObject.name = "test"; myObject.address = "test"; myObject.contactno = 1234; String url = "http://www.myurl.com/key/1234? " + myObject; webRequest myRequest = webRequest.create (url); webResponse myResponse = myRequest.getResponse (); myResponse.close ();

Ahora lo anterior no funciona, pero si trato de alcanzar la URL manualmente de esta manera funciona-

"http://www.myurl.com/Key/1234?name=Test&address=test&contactno=1234

¿Alguien puede decirme qué estoy haciendo mal aquí?

¿Fue útil?

Solución

En este caso, "myobject" llama automáticamente su método toString (), que devuelve el tipo de objeto como una cadena.

Debe elegir cada propiedad y agregarla a la QueryString junto con su valor. Puede usar la clase PropertyInfo para esto.

foreach (var propertyInfo in myobject.GetType().GetProperties())
{
     url += string.Format("&{0}={1}", propertyInfo.Name, propertyInfo.GetValue(myobject, null));
}

El método GetProperties () se sobrecarga y se puede invocar con BindingFlags para que solo se devuelvan las propiedades definidas (como BindingFlags.Public solo para devolver las propiedades públicas). Ver: http://msdn.microsoft.com/en-us/library/kyaxdd3x.aspx

Otros consejos

Recomendaría definir cómo convertir MyObject en valores de cadena de consulta. Haga un método en el objeto que sepa cómo establecer propiedades para todos sus valores.

public string ToQueryString()
{
    string s = "name=" + this.name;
    s += "&address=" + this.address;
    s += "&contactno=" + this.contactno;
    return s
}

Luego, en lugar de agregar myObject, agregue myObject.toqueryString ().

Aquí está el método de tostración que escribí -

public override string ToString()
    {
        Type myobject = (typeof(MyObject));
        string url = string.Empty;
        int cnt = 0;
        foreach (var propertyInfo in myobject.GetProperties(BindingFlags.Public | BindingFlags.Instance))
        {
            if (cnt == 0)
            {
                url += string.Format("{0}={1}", propertyInfo.Name, propertyInfo.GetValue(this, null));
                cnt++;
            }
            else
                url += string.Format("&{0}={1}", propertyInfo.Name, propertyInfo.GetValue(this, null));
        }
        return url;
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top