Pergunta

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

Agora o acima não funciona, mas se eu tentar bater no URL manualmente dessa maneira, ele funciona-

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

Alguém pode me dizer o que estou fazendo de errado aqui?

Foi útil?

Solução

Nesse caso, "MyObject" chama automaticamente seu método tostring (), que retorna o tipo de objeto como uma string.

Você precisa escolher cada propriedade e adicioná -la à consulta juntamente com seu valor. Você pode usar a classe PropertyInfo para isso.

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

O método getProperties () está sobrecarregado e pode ser invocado com flags de ligação, para que apenas as propriedades definidas sejam retornadas (como bindingflags.public para retornar apenas propriedades públicas). Ver: http://msdn.microsoft.com/en-us/library/kyaxdd3x.aspx

Outras dicas

Eu recomendaria definir como transformar o MyObject em valores de string de consulta. Faça um método no objeto que saiba definir propriedades para todos os seus valores.

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

Em seguida, em vez de adicionar myObject, adicione myObject.ToQueryString ().

Aqui está o método da tostragem que escrevi -

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top