Как опубликовать пользовательский пользовательский объект к URL?
-
25-09-2019 - |
Вопрос
Myobject myobject = новый myobject (); myobject.name = «тест»; 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 (), который возвращает тип объекта в виде строки.
Вам нужно выбрать каждое свойство и добавить его в запрос вместе со своим значением. Вы можете использовать класс ProgelsInfo для этого.
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/kyaxdd3x.aspx.
Другие советы
Я бы порекомендовал определить, как включить myObject в строковые значения запросов. Сделайте способ на объекте, который знает, как установить свойства для всех его значений.
public string ToQueryString()
{
string s = "name=" + this.name;
s += "&address=" + this.address;
s += "&contactno=" + this.contactno;
return s
}
Затем вместо добавления myObject добавьте myobject.toqueryString ().
Вот метод 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;
}