سؤال

myobject myobject = new myobject () ؛ myobject.name = "test" ؛ myobject.address = "test" ؛ myobject.contactno = 1234 ؛ url url = "http://www.myurl.com/key/1234؟

الآن ما سبق لا يعمل ولكن إذا حاولت ضرب عنوان URL يدويًا بهذه الطريقة ، فإنه يعمل-

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

هل يمكن لأي شخص أن يخبرني ما الذي أفعله هنا؟

هل كانت مفيدة؟

المحلول

في هذه الحالة ، يقوم "MyObject" تلقائيًا باستدعاء طريقة ToString () ، والتي تُرجع نوع الكائن كسلسلة.

تحتاج إلى اختيار كل خاصية وإضافتها إلى QueryString مع قيمتها. يمكنك استخدام فئة 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

نصائح أخرى

أوصي بتحديد كيفية تحويل myobject إلى قيم سلسلة الاستعلام. قم بعمل طريقة على الكائن الذي يعرف كيفية تعيين خصائص لجميع قيمه.

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

ثم بدلاً من إضافة myobject ، أضف myobject.ToququeString ().

إليكم طريقة 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;
    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top