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 שנוצר אוטומטית מהמודל.
מקוה שיהיה שימושי