MVC5 WebApi החרגת מאפיין ממחלקה חיצונית (EF Model) מהJson
-
נשאלתי איך להחריג מאפיין מJson שנוצר אוטומטית ע"י WebApi.
אם זו הייתה מחלקה רגילה, אפשר לסמן את המאפיין ע"י הAttribute של JsonIgnore:public class Product { public int A { get; set; } [JsonIgnore] public int B { get; set; } }אבל הבעיה שהמחלקה בכלל לא אצלנו, כי היא נוצרת אוטומטית ע"י Model Designer של EntityFramework.
אז בעצם אנחנו רוצים לעשות Atrribute למאפיין קיים במחלקה שרק הpartial שלה חשוף לנו.
בדיוק אתמול @clickone הראה לי שיש לזה פתרון מעניין ע"י Attribute בשם MetadataType שבעצם מאפשר להצמיד מחלקה אחרת שהגדרות מאפייניה יוחלו על המחלקה הנוכחית אם השם והסוג תואמים.
אז קודם צריך לאתר או ליצור מחלקת partial מתאימה למחלקה שלנו (אפשר ליצור אותה בכל מקום בפרוייקט רק לשים לב שהNamespace יהיה מתאים למקור), רק בשביל להצמיד את הAttribute האמור עם ההפניה למחלקה המתאימה ששם נעשה מאפיינים זהים למקור רק עם תוספת הJsonIgnore במקרה שלנו.
הפתרון מתואר פה: https://stackoverflow.com/questions/3782405/can-i-define-properties-in-partial-classes-then-mark-them-with-attributes-in-anהנה דוגמה:
[MetadataType(typeof(TheEntityName_ApplyAttributes))] public partial class TheEntityName { } public partial class TheEntityName_ApplyAttributes { [JsonIgnore] public int B { get; set; } }המחלקה TheEntityName היא שמה של המחלקה שנוצרת אוטומטית, שמתי בלוק ריק כי הדבר היחיד שאנחנו צריכים פה זה ההצמדה בין המJsonIgnore ששמתי למאפיין B של TheEntityName_ApplyAttributes, למאפיין B של TheEntityName שנוצר אוטומטית מהמודל.
מקוה שיהיה שימושי

שלום! נראה שהשיחה הזו מעניינת אותך, אבל עדיין אין לך חשבון.
נמאס לכם לגלול בין אותם הפוסטים בכל ביקור? כשנרשמים לחשבון, תמיד תחזרו בדיוק למקום שבו הייתם קודם, ותוכלו לבחור לקבל התראות על תגובות חדשות (בין אם במייל, ובין אם בהתראת פוש). תוכלו גם לשמור סימניות ולפרגן ב-upvote לפוסטים כדי להביע הערכה לחברי קהילה אחרים.
בעזרת התרומה שלך, הפוסט הזה יכול להיות אפילו טוב יותר 💗
הרשמה התחברות