1

MyObject myobject= new MyObject(); myobject.name="テスト"; myobject.address="テスト"; 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

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

4

3 に答える 3

1

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

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

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

于 2010-08-30T15:58:39.277 に答える
1

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

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

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

GetProperties() メソッドはオーバーロードされており、定義済みのプロパティのみが返されるように BindingFlags で呼び出すことができます (パブリック プロパティのみを返す BindingFlags.Public など)。参照: http://msdn.microsoft.com/en-us/library/kyaxdd3x.aspx

于 2010-08-30T16:05:35.470 に答える
0

これが私が書いたtostringメソッドです-

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;
    }
于 2010-08-30T16:35:48.147 に答える