質問

myobject myobject = new Myobject(); myobject.name = "test"; myobject.address = "test"; myobject.contactno = 1234;文字列url = "http://www.myurl.com/key/1234? " + myobject; webRequest myRequest = webrequest.create(url); webresponse myResponse = myrequest.getResponse(); myResponse.close();

今では上記は機能しませんが、この方法で手動でURLをヒットしようとすると機能します - それは機能します -

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

誰かが私がここで何を間違えているのか教えてもらえますか?

役に立ちましたか?

解決

この場合、「Myobject」はToString()メソッドを自動的に呼び出します。これは、オブジェクトのタイプを文字列として返します。

各プロパティを選択し、その価値と一緒にクエリストリングに追加する必要があります。これにはPropertyInfoクラスを使用できます。

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

getProperties()メソッドは過負荷になり、バインディングフラグで呼び出すことができ、定義されたプロパティのみが返されるように(BindingFlags.publicなど)。見る: http://msdn.microsoft.com/en-us/library/kyaxddd3x.aspx

他のヒント

Myobjectをクエリ文字列値に変える方法を定義することをお勧めします。すべての値に対してプロパティを設定する方法を知っているオブジェクト上にメソッドを作成します。

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

次に、myobjectを追加する代わりに、myobject.toquerystring()を追加します。

これが私が書いたトストリング方法です -

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;
    }
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top