Frage

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 ();

Jetzt funktioniert das obige nicht, aber wenn ich versuche, die URL auf diese Weise manuell zu treffen, funktioniert sie-

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

Kann mir jemand sagen, was ich hier falsch mache?

War es hilfreich?

Lösung

In diesem Fall ruft "MyObject" die Methode toString () automatisch auf, die den Typ des Objekts als Zeichenfolge zurückgibt.

Sie müssen jede Eigenschaft auswählen und zusammen mit ihrem Wert zum QueryString hinzufügen. Sie können die PropertyInfo -Klasse dafür verwenden.

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

Die GetProperties () -Methode wird überladen und kann mit BindingFlags aufgerufen werden, so dass nur definierte Eigenschaften zurückgegeben werden (wie BindingFlags.public, um nur öffentliche Eigenschaften zurückzugeben). Sehen: http://msdn.microsoft.com/en-us/library/kyaxdd3x.aspx

Andere Tipps

Ich würde empfehlen, zu definieren, wie Sie MyObject in Abfragestönewerte verwandeln können. Erstellen Sie eine Methode auf dem Objekt, das weiß, wie man Eigenschaften für alle seine Werte festlegt.

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

Anstatt MyObject hinzuzufügen, fügen Sie myObject.toqueryString () hinzu.

Hier ist die ToString -Methode, die ich geschrieben habe - -

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;
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top