web api with json
-
@דוד ל.ט.
אברהם אתה כריש!
רק הערה, הקוד שהבאת עובד טוב? כי לדעתי המתודה json (בשורה 24) מקבלת אובייקט וממירה אותו לjson. ואילו אתה נותן לה סטרינג מה שיביא את התוצאה של אובייקט עם ערך טקסטואלי יחיד.תודה על המחמאות
אכן כן, אצלי זה עובד מעולה!! כיון שהשרת המרוחק שולח אובייקט JSON, אז זה לא סטרינג רגיל, אלא סטרינג של JSON..
בתוך אובייקט הJSON שנוצר, יש כמה מאפיינים ובמאפיין DATA נמצאים הנתונים של האובייקט אותם אני מחלץ ע"י מתודה של JS באופן דינמי.
בהתחלה חשבתי שאפשר לוותר על השימוש ב - StreamReader כיון שגם ככה השרת שולח JSON מוכן. אולם, בלי השימוש בזה לא הצלחתי למצוא את הJSON. כנראה שרק ככה הוא קורא את הנתונים מהשרת.
@דוד ל.ט.וכמובן זה רק כשהשרת הוא צינור בין שרת אחר ללקוח - וזה אכן לא הגיוני ברוב המקרים. אבל במידה וצריך מוניפולציה כמו שאמרת אז הקוד שהבאת הוא מדוייק רק חסר השלב של פיענוח הjson - כנראה בגלל שהשארת פתוח בהתאם לצרכים.
אני אכן משתמש בזה רק בתור צינור, כיון שהJSONP לא עבד לי בהתחלה. אמנם, אח"כ הבנתי שאני צריך לגרום שהשרת המרוחק יחזיר את הJSON עטוף בפונקציה כדי שזה יעבוד, אבל עדיין לא שיניתי את זה.
אולם, כמו שכתבת זה המקום גם לפיענוח הJSON וכו' כל אחד לפי צרכיו.פורסם במקור בפורום CODE613 ב16/11/2015 14:43 (+02:00)
-
@דוד ל.ט.
רק הערה, הקוד שהבאת עובד טוב? כי לדעתי המתודה json (בשורה 24) מקבלת אובייקט וממירה אותו לjson. ואילו אתה נותן לה סטרינג מה שיביא את התוצאה של אובייקט עם ערך טקסטואלי יחיד.
אכן כן, אצלי זה עובד מעולה!! כיון שהשרת המרוחק שולח אובייקט JSON, אז זה לא סטרינג רגיל, אלא סטרינג של JSON..
צדקת ממני :lol: :lol:
אכן בקוד הJS אני מבצע המרה לאובייקט JSON ולכן זה עבד לי טוב..success: function (returnJson) { var returnData = JSON.parse(returnJson);
פורסם במקור בפורום CODE613 ב16/11/2015 21:59 (+02:00)
-
ומה אמורים לכתוב בקטעים המודגשים?
אין לי שום אובייקט להמיר אני רוצה לקבל אובייקט מסוג JSON אני לא שולחת שום אובייקט אבל[u:3h2mtbn7]//המרת האובייקט לJSON
//כתיבת האוביקט לתוך השאילתא[/u:3h2mtbn7]
using (var sw = new StreamWriter(request.GetRequestStream()))
{
[u:3h2mtbn7] // sw.Write(כאן צריך להכניס את הג'יסון );[/u:3h2mtbn7]
}פורסם במקור בפורום CODE613 ב17/11/2015 10:28 (+02:00)
-
אם את רק מקבלת ולא שולחת כלום - אז את יכולה למחוק את כל זה.
כמו כן, עדיף לעשות כמו שדוד הציע, ולכן תשני את הפונקציה שתחזיר ActionResult ולא JsonResult
ובסוף במקום לכתוב:return Json(result, JsonRequestBehavior.AllowGet);
עדיף לעשות:
return Content(result , "application/json");
כמו כן, אם את כן צריכה לשלוח כל מיני פרמטרים לשרת שם, אז אם את שולחת POST אז תעשי איך שכתבתי למעלה.
אך אם זה GET, אז פשוט מוסיפים את הנתונים מיד בסיום הURL, לאחר הסימן ?.
בהצלחה!פורסם במקור בפורום CODE613 ב17/11/2015 10:36 (+02:00)
-
כן ככה בדיוק עשיתי ובאמת קיבלת את אובייקט הJSON המבוקש
הבעיה שלי עכשיו איך מתעסקים עם הדבר הזה בC#
אין לי מושג איך ניגשים להיררכיה הזו
יש למישהו דוגמא לריצה או גישה לתוכן של JSON בC#?
כי אני רוצה למלא איזה VM ואותו לשלוח לקליינטפורסם במקור בפורום CODE613 ב17/11/2015 10:50 (+02:00)
-
בC# מתעסקים עם json עם המחלקה json.net. היא זמינה במנהל החבילות של nuget (קליק ימני על הפרוייקט/סולושן > Manage Nuget Package...).
כעת השאלה מה את רוצה לעשות וזה בעצם מה שכדאי תמיד לפרט במקסימום בשאלה.
למשל אם: את יודעת מראש (בעת כתיבת הקוד) את המבנה של הjson?
במקרה כזה הכי נוח זה ליצור מחלקת C# מקבילה למבנה הJSON. ואז סריאליזציה: http://www.newtonsoft.com/json/help/html/DeserializeObject.htmאבל אם המבנה דינמי כל פעם משהו אחר (או שהוא קבוע רק שאינך יודעת אותו מראש) אז מוכרחים לעבוד ע"י ניתוח התוכן. הנה מצב של עיבוד json לא ספציפי:
http://www.newtonsoft.com/json/help/html/ReadJsonWithJsonTextReader.htmפורסם במקור בפורום CODE613 ב17/11/2015 14:53 (+02:00)
-
מצאתי איזשהי דרך לעבוד עם הJSON כי זה אובייקט ממש מורכב ולא שייך ליצור לו אובייקט מתאים
using (var sr = new StreamReader(response.GetResponseStream())) { var result = sr.ReadToEnd(); var obj = JObject.Parse(result); for (int i = 0; i < 10; i++) { vm.Images.Add(new InsetegramModels() { ImagePath = obj.GetValue("data")[i]["images"]["standard_resolution"]["url"].ToString(), Caption = obj.GetValue("data")[i]["caption"]["text"].ToString(), CreatedDate = GeneralUtil.UnixTimeStampToDateTime(Convert.ToDouble(obj.GetValue("data")[0]["created_time"].ToString())), Likes = obj.GetValue("data")[i]["likes"]["count"].ToString(), }); } }
האם זה נחשב דרך קצת פרימיטיבית ולא חכמה?
פורסם במקור בפורום CODE613 ב18/11/2015 09:52 (+02:00)
-
כעיקרון כשעובדים עם פרוייקט API לא צריך לדעת כמעט כלום על ג'ייסון אם עובדים עם התפיסה של דוט נט, הוא יודע לקחת אובייקטים ולהפוך אותם לג'ייסון לבד, וכן לקבל ג'ייסון ולהמיר אותו לאובייקט כבר בפרמטר של הקונטרולר, זה די מיותר להתחרבש עם מחלקות של ג'ייסון.
פורסם במקור בפורום CODE613 ב18/11/2015 23:40 (+02:00)