<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.microsoft.co.il/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>itaysk</title><link>http://blogs.microsoft.co.il/blogs/itaysk/</link><description>Itay Shakury&amp;#39;s blog</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>Posts Summary 29 October, 2012</title><link>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/10/29/posts-summary-29-october-2012.aspx</link><pubDate>Tue, 30 Oct 2012 00:26:36 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1391990</guid><dc:creator>Itay Shakury</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/itaysk/rsscomments.aspx?PostID=1391990</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/10/29/posts-summary-29-october-2012.aspx#comments</comments><description>&lt;ul&gt;   &lt;li&gt;&lt;a href="http://blog.itayasaservice.com/2012/10/13/i-will-be-speaking-at-sharepoint-2013-ignite-training/"&gt;I Will Be Speaking At SharePoint 2013 Ignite Training&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.itayasaservice.com/2012/10/26/the-one-thing-that-windows-8-is-missing-guidance/"&gt;The One Thing That Windows 8 is Missing – Guidance&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.itayasaservice.com/2012/10/29/new-dates-for-sharepoint-2013-ignite-course/"&gt;New Dates For SharePoint 2013 Ignite Course&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1391990" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/ITPRO/default.aspx">ITPRO</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/Events/default.aspx">Events</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/Windows+8/default.aspx">Windows 8</category></item><item><title>Posts Summary - 22 September, 2012</title><link>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/09/22/posts-summary-22-september-2012.aspx</link><pubDate>Sun, 23 Sep 2012 03:59:03 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1302095</guid><dc:creator>Itay Shakury</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/itaysk/rsscomments.aspx?PostID=1302095</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/09/22/posts-summary-22-september-2012.aspx#comments</comments><description>&lt;ul&gt;   &lt;li&gt;&lt;a title="Permalink to Stretched Farms are Not Supported Anymore in SharePoint 2013" href="http://blog.itayasaservice.com/2012/09/12/stretched-farms-are-not-supported-anymore-in-sharepoint-2013/"&gt;Stretched Farms are Not Supported Anymore in SharePoint 2013&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1302095" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/ITPRO/default.aspx">ITPRO</category></item><item><title>Posts Summary – September 01, 2012</title><link>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/09/01/posts-summary-september-01-2012.aspx</link><pubDate>Sat, 01 Sep 2012 17:21:40 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1256217</guid><dc:creator>Itay Shakury</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/itaysk/rsscomments.aspx?PostID=1256217</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/09/01/posts-summary-september-01-2012.aspx#comments</comments><description>&lt;ul&gt;   &lt;li&gt;&lt;a title="Tips for Working With ListData.svc" href="http://blog.itayasaservice.com/2012/08/15/tips-for-working-with-listdata-svc/"&gt;Tips for Working With ListData.svc&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a title="The Unique Security Scopes Per List Limit" href="http://blog.itayasaservice.com/2012/09/01/the-unique-security-scopes-per-list-limit/"&gt;The Unique Security Scopes Per List Limit&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1256217" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/DEV/default.aspx">DEV</category></item><item><title>Posts Summary – August 11, 2012</title><link>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/08/11/posts-summary-august-11-2012.aspx</link><pubDate>Sat, 11 Aug 2012 21:18:58 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1206254</guid><dc:creator>Itay Shakury</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/itaysk/rsscomments.aspx?PostID=1206254</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/08/11/posts-summary-august-11-2012.aspx#comments</comments><description>&lt;ul&gt;   &lt;li&gt;&lt;a href="http://blog.itayasaservice.com/2012/08/01/public-sharepoint-online-sites-are-not-available-to-anonymous-users/"&gt;Public SharePoint Online Sites Are Not Available to Anonymous Users&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.itayasaservice.com/2012/08/01/sharepoint-2013-preview-hidden-prerequisites/"&gt;SharePoint 2013 Preview Hidden Prerequisites&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a title="Permalink to Organizing SharePoint Solutions in Hierarchy" href="http://blog.itayasaservice.com/2012/08/09/organizing-sharepoint-solutions-in-hierarchy/"&gt;Organizing SharePoint Solutions in Hierarchy&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blog.itayasaservice.com/2012/08/11/the-downside-of-site-based-hierarchy/"&gt;The Downsides of Site Based Hierarchy&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1206254" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/DEV/default.aspx">DEV</category></item><item><title>Refreshing my social presence - New blog, Twitter</title><link>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/08/01/refreshing-my-social-presence-new-blog-twitter.aspx</link><pubDate>Wed, 01 Aug 2012 21:44:41 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1182529</guid><dc:creator>Itay Shakury</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/itaysk/rsscomments.aspx?PostID=1182529</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/08/01/refreshing-my-social-presence-new-blog-twitter.aspx#comments</comments><description>&lt;p&gt;Hello readers,&lt;/p&gt;  &lt;p&gt;Ready for some changes?&lt;/p&gt;  &lt;p&gt;I am starting a new independent blog, which will be my primary work related blog.    &lt;br /&gt;It is called “&lt;strong&gt;Itay as a Service&lt;/strong&gt;”, and is available now under: &lt;a href="http://blog.itayasaservice.com"&gt;http://blog.itayasaservice.com&lt;/a&gt;     &lt;br /&gt;The old link will work as well: &lt;a href="http://blog.itaysk.com"&gt;http://blog.itaysk.com&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;As for this blog, I will keep posting here summaries of my new posts, in order for subscribed readers to stay in the loop. All the content that was written here will stay here and will not be moved.&lt;/p&gt;  &lt;p&gt;Also, I am (finally) joining the twitter community with a new account specifically for my professional interests.&amp;#160; &lt;br /&gt;&lt;strong&gt;Follow me on Twitter!&lt;/strong&gt; &lt;a href="https://twitter.com/itayasaservice" target="_blank"&gt;@itayasaservice&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Itay Shakury.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1182529" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/ITPRO/default.aspx">ITPRO</category></item><item><title>Is Metro Interface a “Performance Driven Design”?</title><link>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/06/19/is-metro-interface-a-performance-driven-design.aspx</link><pubDate>Wed, 20 Jun 2012 02:07:11 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1124565</guid><dc:creator>Itay Shakury</dc:creator><slash:comments>27</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/itaysk/rsscomments.aspx?PostID=1124565</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/06/19/is-metro-interface-a-performance-driven-design.aspx#comments</comments><description>&lt;p dir="rtl" align="right"&gt;האם ממשק המטרו הוא רעיון גאוני לעיצוב מונחה &lt;strong&gt;ביצועים&lt;/strong&gt;? &lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;כשיצא Windows Vista אני זוכר שקראתי ציטוט של מישהו ממיקרוסופט, שאמר משהו בסגנון שלמחשבים היום (אז) יש המון כוח עיבוד, (בצורת מעבדים חזקים, כרטיסי מסך משוכללים, וזכרון) והוא לא כל כך בא לידי ביטוי בשימוש יומיומי של גלישה באינטרנט ועריכת מסמכים. ולכן ניצלו את הכוח הזה ליצירת ממשק יותר יפה שנקרא Aero שגם על הדרך נותן תירוץ להשתמש בכל הכוח הזה שלרוב הוא לא מנוצל. Aero של Windows Vista וגם Windows 7 עושה שימוש בהרבה אלמנטים עיצוביים שדורשים כוח עיבוד רב כמו לדוגמא: שקיפות למחצה, אפקטים (לדוגמא, אפקט הזכוכית על חלון), צללים מאחורי חלונות, אנימציות, וכו.&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;הציטוט הזה היה נכון אולי לעולם של לפני 10 שנים, אבל למי שפספס, אנחנו בעיצומו (או אולי רק בתחילתו) של עידן חדש, והמגמה היא בדיוק הפוכה ממה שהציטוט מציג. המחשבים היום (אולי לא מדוייק לקרוא להם מחשבים, מדובר על טלפונים, טאבלטים וכו... נקרא להם התקנים - Devices), הם דווקא חלשים יותר ממה שהתרגלנו אליו בעבר. כלומר, אנחנו רוצים התקנים יותר ניידים ויותר קלים ויותר דקים, וזה עולה בביצועים, ולכן היום אנו דורשים מתכנה שתרוץ דווקא על התקנים חלשים יותר מבעבר. זה התחיל עם הנטבוקים, ועכשיו ממשיך עם הטאבלטים.&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;אני לא יודע אם זה היה רעיון גאוני מכוון של מישהו במיקרוסופט, או שזה באמת במקרה, אבל מטרו, השפה העיצובית החדשה של מיקרוספט היא בדיוק מה שעולם התכנה של מיקרוספט היה צריך כדי לבצע את המעבר הזה.&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/itaysk/screenshot_win8prev_hero_5AA578BF.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:10px 0px 0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="screenshot_win8prev_hero" border="0" alt="screenshot_win8prev_hero" src="http://blogs.microsoft.co.il/blogs/itaysk/screenshot_win8prev_hero_thumb_136FACC0.jpg" width="244" height="183" /&gt;&lt;/a&gt;    &lt;br /&gt;&lt;em&gt;&lt;font size="1"&gt;מסך הפתיחה של Windows 8 (דוגמא לממשק מטרו)&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;ננסה לפרט את העקרונות שמגדירים את מטרו:    &lt;br /&gt;&lt;strong&gt;ממשק פשוט, נקי ומינימליסטי, שימוש בטיפוגרפיה (טקסט בעיקר) כאמצעי ניווט שולט, בנוסף, הוא מתאפיין בצבעים אחידים ופשוטים, וצורות מרובעות. &lt;/strong&gt;    &lt;br /&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/itaysk/Windows_Phone_7.5_Start_Screen_3C2B1209.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:10px 10px 0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Windows_Phone_7.5_Start_Screen" border="0" alt="Windows_Phone_7.5_Start_Screen" src="http://blogs.microsoft.co.il/blogs/itaysk/Windows_Phone_7.5_Start_Screen_thumb_44EAF488.png" width="148" height="244" /&gt;&lt;/a&gt;    &lt;br /&gt;&lt;em&gt;&lt;font size="1"&gt;מסך הפתיחה של Windows Phone 7.5 (דוגמא לממשק מטרו)&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;אני אישית מאוד אוהב את השפה העיצובית הזאת וחושב שהיא מאוד אסתטית ויפה. אבל האם זה כל מה שעומד מאחורי המניע לשינוי הדרמטי הזה?&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;אם מסתכלים על המאפיינים של מטרו שתיארתי מקודם, קל לשים לב שהעקרונות מכתיבים ממשקים מאוד פשוטים, לא רק פשוטים למשתמש, אך גם פשוטים למחשב.    &lt;br /&gt;מבחינה עיבודית, כשמכונה כמו מחשב צריכה לצייר (to Render) מסך של מטרו, זה הרבה יותר פשוט מאשר מסך כמו של Android לדוגמא, או אפילו Windows 7.    &lt;br /&gt;עכשיו קחו את מה שאמרתי, ותוסיפו לזה את המגמה האדירה של עולם התכנה לכיוון אפליקציות מבוססות דפדפן, שגם הפכה למיינסטרים ב Windows 8, ותבינו איך הגעתי לחשוב על הקונפירציה הזו - אם אני רוצה לצייר בדפדפן באמצעות HTML\JS\CSS מסך של מטרו, זה הרבה הרבה הרבה יותר פשוט מלצייר לדוגמא מסך של אנדרואיד, או של מק. זו עבודה פשוטה מאוד, גם לדפדפן וגם למתכנת.&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/itaysk/htc_rosie_1_411D29EB.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="htc_rosie_1" border="0" alt="htc_rosie_1" src="http://blogs.microsoft.co.il/blogs/itaysk/htc_rosie_1_thumb_5D6A6C0B.jpg" width="164" height="244" /&gt;&lt;/a&gt;    &lt;br /&gt;&lt;em&gt;&lt;font size="1"&gt;מסך הפתיחה של Android with HTC Sense (דוגמא לממשק שאינו מטרו)&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;בואו נסתכל העקרונות שתיארנו מקודם, ונראה איך הם עוזרים לא רק לאסתטיקה, אלא גם לביצועים:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="right"&gt;&lt;strong&gt;&lt;u&gt;ממשק פשוט, מינימליסטי, נקי&lt;/u&gt;&lt;/strong&gt; - מבחינת המחשב זה פשוט מאוד. כמה שפחות דברים שהוא צריך לצייר למסך, הוא יעשה את זה יותר מהר. אם אנחנו אומרים שאנחנו רוצים מסכים פחות עמוסים בפקדים, זה אומר שהמסך ירוץ יותר מהר.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="right"&gt;&lt;strong&gt;&lt;u&gt;צבעים אחידים&lt;/u&gt;&lt;/strong&gt; - בשביל מחשב לצבוע ריבוע בצבע כחול, זה הרבה יותר קל מלצבוע אותו בצבע מדורג (Gradiant) שהופל מכתום לכחול. אם מסתכלים עם דפדפנים זה אפילו יותר בולט, כשצביעה בצבע אחיד היא פעולה טריוואלית, בעוד שצבע מדורג היא פעולה לא פשוטה בכלל. אם נתחיל להשוות לאפקטים למיניהם כמו שקיפות למחצה, או אפקט הזכוכית, כאן זה כבר הבדל עצום בביצועים, וכשמדברים על דפדפן זה גם קשה למימוש עד בלתי אפשרי (תלוי באפקט).&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="right"&gt;&lt;strong&gt;&lt;u&gt;ריבועים&lt;/u&gt;&lt;/strong&gt; - צורות מלבניות למיניהן, הן יחידת ציוד די בסיסית למחשב. זאת לעומת צורות מורכבות יותר כמו לדוגמא, צורה של טיפה (סתם דוגמא). זה נובע מהמתמטיקה שמאחורי הצורה, אבל בשורה התחתונה, המחשב יצייר ריבועים הרבה יותר טוב מאשר טיפות, או לדוגמא ריבועים עם פינות מעוגלות (שרואים הרבה לדוגמא באייפון). אם נדבר על דפדפנים אז כאן ריבועים זה אבני היסוד של דפים. לצייר טיפה בדפדפן זו עבודה לא פשוטה בכלל וצורכת הרבה יותר משאבים מציור מלבן שפחות או יותר מסתכם בשורה אחת המייצרת Div עם Border ו Background-Color.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="right"&gt;&lt;strong&gt;טיפוגרפיה&lt;/strong&gt; - קחו לדוגמא את ממשק הפנורמה של Windows Phone 7. הוא מורכב רובו ככולו מטקסטים בלבד. אין אייקונים או סמלים מיוחדים, או תמונות או צורות אחרות. כמעט הכל שם זה טקסט. כתיבת טקסט היא גם אחת הפעולות הבסיסיות של המחשב ושל כל תשתית UI. אין צורך בכלי ציור מתוחכמים כדי לכתוב טקסט למסך. במיוחד כשמדובר על דפדפנים שבמקור נבנו עבור המטרה היחידה של הצגת טקסט, ולכן עושים זאת בקלות רבה מאוד.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="right"&gt;&lt;strong&gt;&lt;u&gt;ממשק ללא תמונות&lt;/u&gt;&lt;/strong&gt; - זו אינה עיקרון ישיר של ממשק מטרו, אבל אם תשימו לב, לרוב באפליקציות מטרו אין תמונות אשר משמשות לבניית הממשק. אני לא מדבר על תמונות שהן חלק מהתוכן כמו לדוגמא תמונה של תל אביב בכתבה שמדברת על תל אביב. אני מדבר על תמונות שבונות את הממשק, כמו לדוגמא אייקונים למיניהם, תמונות רקע, חלקים מהתפריט, וכולי. לצייר תמונה על המסך זו לא עבודה קשה למחשב, אבל בטוח שיותר קשה מלצייר קו, או ריבוע. בנוסף, מעבר ליתרון בביצועים, עם תמונות קשה להתעסק. כדי שיראו טוב צריך שיהיו ברזולוציה גבוהה, וזה אומר נפח גדול. צריך לדאוג לשמור על פרופורציות. לפעמים צריך לספק כמה גדלים לאותה תמונה עבור שימושים שונים, ואי אפשר להגדיל או להקטין אותן בקלות תוך שמירה על המראה המקורי.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p dir="rtl" align="right"&gt;בואו נראה את ההבדלים בפועל:&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;זהו מסך ההגדרות של אייפון. ציינתי על התמונה אלמנטים ש”מכבידים” על הממשק מבחינת ביצועים:&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/itaysk/iPhone-settings-design_0D450DCD.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="iPhone settings design" border="0" alt="iPhone settings design" src="http://blogs.microsoft.co.il/blogs/itaysk/iPhone-settings-design_thumb_6883D088.jpg" width="644" height="454" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;לעומת ממשק ההגדרות של Windows Phone:&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/itaysk/ScreenDump_2011-16-31-10-16-01-3160-PM_793B5569.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ScreenDump_2011-16-31-10-16-01-3160-PM" border="0" alt="ScreenDump_2011-16-31-10-16-01-3160-PM" src="http://blogs.microsoft.co.il/blogs/itaysk/ScreenDump_2011-16-31-10-16-01-3160-PM_thumb_1E95230B.jpg" width="292" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;זו לא תחרות מי יותר יפה. רק שימו לב להבדלים מנקודת מבט תכנותית.&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;דוגמא נוספת: &lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;שולחן העבודה של Windows Vista:    &lt;br /&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/itaysk/Vista-design_70C75A45.jpg"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Vista design" border="0" alt="Vista design" src="http://blogs.microsoft.co.il/blogs/itaysk/Vista-design_thumb_0B63D092.jpg" width="644" height="395" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;(האמת שיש כאן המון אפקטים קטנים, אבל רק הדגשתי את הבולטים מביניהם.)&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;לעומת שולחן העבודה של Windows 8:&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/itaysk/8270_Desktop-theme_0459AA86_132BC334.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="8270_Desktop-theme_0459AA86" border="0" alt="8270_Desktop-theme_0459AA86" src="http://blogs.microsoft.co.il/blogs/itaysk/8270_Desktop-theme_0459AA86_thumb_3004C23C.png" width="644" height="404" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;הנה ציטוט &lt;a href="http://blogs.msdn.com/b/b8/archive/2012/05/18/creating-the-windows-8-user-experience.aspx" target="_blank"&gt;מהבלוג של צוות הפיתוח של וינדוס 8&lt;/a&gt;, שמראה מה השתנה בעיצוב:&lt;/p&gt;  &lt;p align="left"&gt;“To complete the story, we updated the appearance of most common controls, such as buttons, check boxes, sliders, and the Ribbon. We squared off the rounded edges, cleaned away gradients, and flattened the control backgrounds”&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;הדוגמאות האלו נועדו להמחיש את הנקודה שלי - שממשקי מטרו הם פשוטים יותר לתצוגה על ידי המחשב, ולכן באופן טבעי יציגו ביצועים טובים יותר מעיצובים “עמוסים” אחרים.&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;&amp;#160;&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;פעם הראיתי לחבר שלי כמה מהיר הממשק של Windows Phone 7, והוא ענה בזלזול &amp;quot;בטח שיהיה יותר מהיר, יש לך רק 2 צבעים במסך וכמה ריבועים וטקסט&amp;quot;. צודק, אולי כאן טמון הסוד?&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1124565" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/Hebrew/default.aspx">Hebrew</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/Metro/default.aspx">Metro</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/Windows+Phone/default.aspx">Windows Phone</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/Windows+8/default.aspx">Windows 8</category></item><item><title>Presenting at SharePoint User Group Tomorrow</title><link>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/05/27/presenting-at-sharepoint-user-group-tomorrow.aspx</link><pubDate>Sun, 27 May 2012 14:10:15 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1104475</guid><dc:creator>Itay Shakury</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/itaysk/rsscomments.aspx?PostID=1104475</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/05/27/presenting-at-sharepoint-user-group-tomorrow.aspx#comments</comments><description>&lt;p dir="rtl" align="right"&gt;תזכורת: מחר (28/05/2012) בשעה 17:30 יתקיים מפגש של SharePoint User Group. אני אעביר הרצאה על Claims Based Authentication in SharePoint 2010.    &lt;br /&gt;המפגש אינו כרוך בתשלום, אך מצריך הרשמה מראש בקישור:     &lt;br /&gt;&lt;a href="http://spug-28-may-eorg.eventbrite.com"&gt;http://spug-28-may-eorg.eventbrite.com&lt;/a&gt; &lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;הערה: למי שהיה בהרצאה שלי בכנס SharePoint Extreme האחרון, מדובר על אותה הרצאה.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1104475" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/Hebrew/default.aspx">Hebrew</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/ITPRO/default.aspx">ITPRO</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/Events/default.aspx">Events</category></item><item><title>BDC -&gt; BCS?</title><link>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/05/15/bdc-gt-bcs.aspx</link><pubDate>Tue, 15 May 2012 19:40:17 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1092403</guid><dc:creator>Itay Shakury</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/itaysk/rsscomments.aspx?PostID=1092403</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/05/15/bdc-gt-bcs.aspx#comments</comments><description>&lt;p&gt;MOSS 2007 had a feature called Business Data Catalog. When SharePoint 2010 came out, this feature was introduced as Business Connectivity Services.&lt;/p&gt;  &lt;p&gt;The common belief is that BCS is the new version of BDC, and that in the new version the name was changed from BDC to BCS. According to this, there is no reason to use the term BDC in the context of SharePoint 2010.    &lt;br /&gt;This is not exactly correct.     &lt;br /&gt;BDC was and still the infrastructure that allows SharePoint to connect to other systems. It has the concept of metadata and descriptors, and is still present in 2010 under the name “Business Data Connectivity”. BCS is based on BDC and is what makes all the advanced connectivity scenarios possible (such as integration with Office, ECT,…).&lt;/p&gt;  &lt;p&gt;In the bottom-line, the terms BDC and BCS is used interchangeably, so you should too. But you don’t have to be angry if you see BDC in the same sentence with SharePoint 2010 :)&lt;/p&gt;  &lt;p&gt;Here are some supporting quotes from MSDN:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;“Business Data Connectivity (BDC) service is the new version of the Business Data &lt;/em&gt;&lt;em&gt;Catalog that was provided in Microsoft Office SharePoint Server 2007”      &lt;br /&gt;&lt;/em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee556407.aspx"&gt;http://msdn.microsoft.com/en-us/library/ee556407.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;“Business Data Connectivity (BDC) service succeeds the Business Data Catalog that was provided in Microsoft Office SharePoint Server 2007”&lt;/em&gt;     &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee558876.aspx"&gt;http://msdn.microsoft.com/en-us/library/ee558876.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;“BDC is the foundation of Business Connectivity Services”      &lt;br /&gt;&lt;/em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee559650.aspx"&gt;http://msdn.microsoft.com/en-us/library/ee559650.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;“Business Data Connectivity (BDC) service in Microsoft Business Connectivity Services (BCS) is the underlying framework in the Microsoft SharePoint Foundation 2010 platform on which Business Connectivity Services is built”&lt;/em&gt;     &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ee557963.aspx"&gt;http://msdn.microsoft.com/en-us/library/ee557963.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1092403" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/DEV/default.aspx">DEV</category></item><item><title>Xml Serialize Interface Typed Members</title><link>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/04/30/xml-serialize-interface-typed-members.aspx</link><pubDate>Mon, 30 Apr 2012 14:48:30 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1078708</guid><dc:creator>Itay Shakury</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/itaysk/rsscomments.aspx?PostID=1078708</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/04/30/xml-serialize-interface-typed-members.aspx#comments</comments><description>&lt;p&gt;If you try to serialize a class that has a public member of an interface type to xml file using the regular .net &lt;a href="http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx" target="_blank"&gt;XmlSerializer&lt;/a&gt;, you will get an error: “Cannot serialize member {m} of type {t} because it is an interface.” ({m} and {t} are placeholders).     &lt;br /&gt;In this post I suggest a workaround to this issue.&lt;/p&gt;  &lt;p&gt;Consider the following scenario:&lt;/p&gt;  &lt;p&gt;You have an object model like this:&lt;/p&gt;  &lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; Car&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; Model { get; set; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; Year { get; set; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; IEngine Engine { get; set; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;interface&lt;/span&gt; IEngine&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt; {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Work();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; ElectricEngine : IEngine&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt; {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; batteryPrecentageLeft;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; BatteryPrecentageLeft&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt;     {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum18"&gt;  18:&lt;/span&gt;         get { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.batteryPrecentageLeft; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum19"&gt;  19:&lt;/span&gt;         set { &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.batteryPrecentageLeft = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum20"&gt;  20:&lt;/span&gt;     }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum21"&gt;  21:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum22"&gt;  22:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; IEngine.Work() { }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum23"&gt;  23:&lt;/span&gt; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum24"&gt;  24:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum25"&gt;  25:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; InternalCombustionEngine : IEngine&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum26"&gt;  26:&lt;/span&gt; {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum27"&gt;  27:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; gasLitersLeft;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum28"&gt;  28:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;int&lt;/span&gt; GasLitersLeft&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum29"&gt;  29:&lt;/span&gt;     {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum30"&gt;  30:&lt;/span&gt;         get { &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.gasLitersLeft; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum31"&gt;  31:&lt;/span&gt;         set { &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.gasLitersLeft = &lt;span style="color:#0000ff;"&gt;value&lt;/span&gt;; }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum32"&gt;  32:&lt;/span&gt;     }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum33"&gt;  33:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum34"&gt;  34:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; IEngine.Work() { }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum35"&gt;  35:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;And you use it like so:&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; Car myCar = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Car();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; myCar.Model = &lt;span style="color:#006080;"&gt;&amp;quot;Ford Focus&amp;quot;&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; myCar.Year = 2011;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt; myCar.Engine = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ElectricEngine() { BatteryPrecentageLeft = 70 };&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt; myCar.Engine.Work();&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;If you would try to serialize &lt;em&gt;myCar&lt;/em&gt; using the regular XmlSerializer, you will get the error above.&lt;/p&gt;

&lt;p&gt;There are many reasons why you shouldn’t want to serialize an interface typed member. I will not dive into this debate right now. I assume that you have considered this before, and are just looking for a workaround.&lt;/p&gt;

&lt;p&gt;So first lets understand what we are trying to achieve. 
  &lt;br /&gt;In the example above, I expect the serialized output of &lt;em&gt;myCar&lt;/em&gt; to be something like this:&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Car&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;xmlns:xsi&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;xmlns:xsd&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Model&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;Ford Focus&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Model&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Year&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;2011&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Year&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Engine&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;ElectricEngine&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;FullAssemblyQualifiedTypeName&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Common.ElectricEngine, Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;       &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;BatteryPrecentageLeft&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;70&lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;BatteryPrecentageLeft&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;ElectricEngine&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;   &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Engine&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Car&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;I have &lt;a href="http://stackoverflow.com/questions/10252207/how-to-serialize-interface-typed-member" target="_blank"&gt;asked a question&lt;/a&gt; on StackOverflow, and &lt;a href="http://stackoverflow.com/users/214222/jens-granlund" target="_blank"&gt;Jens Granlund&lt;/a&gt; has pointed me in the right direction. 

  &lt;br /&gt;The workaround that I have implemented consists of the following steps:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Mark all interface typed members with the &lt;a href="http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlignoreattribute.aspx" target="_blank"&gt;&lt;em&gt;XmlIgnoreAttribute&lt;/em&gt;&lt;/a&gt;, that tells the XmlSerializer to not serialize those members. &lt;/li&gt;

  &lt;li&gt;Now serialize the class to produce an output similar to the one above, but without the problematic members. &lt;/li&gt;

  &lt;li&gt;For-each member marked with the attribute, get it’s current value, and that value’s type. That can only be done in runtime. &lt;/li&gt;

  &lt;li&gt;Use that type to create a standard XmlSerializer, and use that serializer to serialize that value. &lt;/li&gt;

  &lt;li&gt;Inject those serialized values to the parent class’s serialized xml. &lt;/li&gt;

  &lt;li&gt;In order to allow regular use of the &lt;em&gt;XmlIgnoreAttribute&lt;/em&gt;, implement a new attribute that act like it. &lt;/li&gt;

  &lt;li&gt;During deserialization perform the same process in reverse. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I have followed that basic recipe to create my own &lt;em&gt;“RuntimeXmlSerializer”&lt;/em&gt;. You use it the same way you would use the standard XmlSerializer.&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; RuntimeXmlSerializerAttribute : XmlIgnoreAttribute { }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;class&lt;/span&gt; RuntimeXmlSerializer&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt; {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; Type m_type;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; XmlSerializer m_regularXmlSerializer;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum8"&gt;   8:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;const&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; k_FullClassNameAttributeName = &lt;span style="color:#006080;"&gt;&amp;quot;FullAssemblyQualifiedTypeName&amp;quot;&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum9"&gt;   9:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum10"&gt;  10:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; RuntimeXmlSerializer(Type i_subjectType)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum11"&gt;  11:&lt;/span&gt;     {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum12"&gt;  12:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.m_type = i_subjectType;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum13"&gt;  13:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.m_regularXmlSerializer = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; XmlSerializer(&lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.m_type);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum14"&gt;  14:&lt;/span&gt;     }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum15"&gt;  15:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum16"&gt;  16:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Serialize(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; i_objectToSerialize, Stream i_streamToSerializeTo)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum17"&gt;  17:&lt;/span&gt;     {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum18"&gt;  18:&lt;/span&gt;         StringWriter sw = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; StringWriter();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum19"&gt;  19:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.m_regularXmlSerializer.Serialize(sw, i_objectToSerialize);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum20"&gt;  20:&lt;/span&gt;         XDocument objectXml = XDocument.Parse(sw.ToString());&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum21"&gt;  21:&lt;/span&gt;         sw.Dispose();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum22"&gt;  22:&lt;/span&gt;         SerializeExtra(i_objectToSerialize,objectXml);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum23"&gt;  23:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; res = objectXml.ToString();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum24"&gt;  24:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;byte&lt;/span&gt;[] bytesToWrite = Encoding.UTF8.GetBytes(res);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum25"&gt;  25:&lt;/span&gt;         i_streamToSerializeTo.Write(bytesToWrite, 0, bytesToWrite.Length);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum26"&gt;  26:&lt;/span&gt;     }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum27"&gt;  27:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum28"&gt;  28:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; Deserialize(Stream i_streamToSerializeFrom)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum29"&gt;  29:&lt;/span&gt;     {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum30"&gt;  30:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; xmlContents = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; StreamReader(i_streamToSerializeFrom).ReadToEnd();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum31"&gt;  31:&lt;/span&gt;         StringReader sr;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum32"&gt;  32:&lt;/span&gt;         sr = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; StringReader(xmlContents);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum33"&gt;  33:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; res = &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.m_regularXmlSerializer.Deserialize(sr);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum34"&gt;  34:&lt;/span&gt;         sr.Dispose();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum35"&gt;  35:&lt;/span&gt;         sr = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; StringReader(xmlContents);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum36"&gt;  36:&lt;/span&gt;         XDocument doc = XDocument.Load(sr);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum37"&gt;  37:&lt;/span&gt;         sr.Dispose();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum38"&gt;  38:&lt;/span&gt;         deserializeExtra(res, doc);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum39"&gt;  39:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; res;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum40"&gt;  40:&lt;/span&gt;     }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum41"&gt;  41:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum42"&gt;  42:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; deserializeExtra(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; i_desirializedObject, XDocument i_xmlToDeserializeFrom)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum43"&gt;  43:&lt;/span&gt;     {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum44"&gt;  44:&lt;/span&gt;         IEnumerable propertiesToDeserialize = i_desirializedObject.GetType()&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum45"&gt;  45:&lt;/span&gt;             .GetProperties().Where(p =&amp;gt; p.GetCustomAttributes(&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum46"&gt;  46:&lt;/span&gt;                 .FirstOrDefault(a =&amp;gt; a.GetType() ==&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum47"&gt;  47:&lt;/span&gt;                     &lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(RuntimeXmlSerializerAttribute)) != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum48"&gt;  48:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (PropertyInfo prop &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; propertiesToDeserialize)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum49"&gt;  49:&lt;/span&gt;         {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum50"&gt;  50:&lt;/span&gt;             XElement propertyXml = i_xmlToDeserializeFrom.Descendants().FirstOrDefault(e =&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum51"&gt;  51:&lt;/span&gt;                 e.Name == prop.Name);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum52"&gt;  52:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (propertyXml == &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;) &lt;span style="color:#0000ff;"&gt;continue&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum53"&gt;  53:&lt;/span&gt;             XElement propertyValueXml = propertyXml.Descendants().FirstOrDefault();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum54"&gt;  54:&lt;/span&gt;             Type type = Type.GetType(propertyValueXml.Attribute(k_FullClassNameAttributeName).Value.ToString());&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum55"&gt;  55:&lt;/span&gt;             XmlSerializer srl = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; XmlSerializer(type);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum56"&gt;  56:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; deserializedObject = srl.Deserialize(propertyValueXml.CreateReader());&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum57"&gt;  57:&lt;/span&gt;             prop.SetValue(i_desirializedObject, deserializedObject, &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum58"&gt;  58:&lt;/span&gt;         }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum59"&gt;  59:&lt;/span&gt;     }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum60"&gt;  60:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum61"&gt;  61:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; SerializeExtra(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; objectToSerialize, XDocument xmlToSerializeTo)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum62"&gt;  62:&lt;/span&gt;     {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum63"&gt;  63:&lt;/span&gt;         IEnumerable propertiesToSerialize =&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum64"&gt;  64:&lt;/span&gt;             objectToSerialize.GetType().GetProperties().Where(p =&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum65"&gt;  65:&lt;/span&gt;                 p.GetCustomAttributes(&lt;span style="color:#0000ff;"&gt;true&lt;/span&gt;).FirstOrDefault(a =&amp;gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum66"&gt;  66:&lt;/span&gt;                     a.GetType() == &lt;span style="color:#0000ff;"&gt;typeof&lt;/span&gt;(RuntimeXmlSerializerAttribute)) != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum67"&gt;  67:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;foreach&lt;/span&gt; (PropertyInfo prop &lt;span style="color:#0000ff;"&gt;in&lt;/span&gt; propertiesToSerialize)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum68"&gt;  68:&lt;/span&gt;         {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum69"&gt;  69:&lt;/span&gt;             XElement serializedProperty = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; XElement(prop.Name);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum70"&gt;  70:&lt;/span&gt;             serializedProperty.AddFirst(serializeObjectAtRuntime(prop.GetValue(objectToSerialize, &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)));&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum71"&gt;  71:&lt;/span&gt;             xmlToSerializeTo.Descendants().First().Add(serializedProperty); &lt;span style="color:#008000;"&gt;//TODO&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum72"&gt;  72:&lt;/span&gt;         }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum73"&gt;  73:&lt;/span&gt;     }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum74"&gt;  74:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum75"&gt;  75:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; XElement serializeObjectAtRuntime(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; i_objectToSerialize)&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum76"&gt;  76:&lt;/span&gt;     {&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum77"&gt;  77:&lt;/span&gt;         Type t = i_objectToSerialize.GetType();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum78"&gt;  78:&lt;/span&gt;         XmlSerializer srl = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; XmlSerializer(t);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum79"&gt;  79:&lt;/span&gt;         StringWriter sw = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; StringWriter();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum80"&gt;  80:&lt;/span&gt;         srl.Serialize(sw, i_objectToSerialize);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum81"&gt;  81:&lt;/span&gt;         XElement res = XElement.Parse(sw.ToString());&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum82"&gt;  82:&lt;/span&gt;         sw.Dispose();&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum83"&gt;  83:&lt;/span&gt;         XAttribute fullClassNameAttribute = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; XAttribute(k_FullClassNameAttributeName, t.AssemblyQualifiedName);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum84"&gt;  84:&lt;/span&gt;         res.Add(fullClassNameAttribute);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum85"&gt;  85:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum86"&gt;  86:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;return&lt;/span&gt; res;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum87"&gt;  87:&lt;/span&gt;     }&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum88"&gt;  88:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Notice that this solution doesn’t handle situations in which the interface typed member is not a direct descendent of the type being serialized. In example if &lt;em&gt;Car&lt;/em&gt; has a member of type &lt;em&gt;List&amp;lt;IWheel&amp;gt;&lt;/em&gt; or if &lt;em&gt;Car&lt;/em&gt; has a member of type &lt;em&gt;Dashboard&lt;/em&gt; which has a member f type &lt;em&gt;IGauge, &lt;/em&gt;than serialization will fail. 

  &lt;br /&gt;This can be solved by recursively performing the “Runtime” serialization on all members, until we reach a primitive member which we can serialize using the regular serializer.&lt;/p&gt;

&lt;p&gt;You can find the Visual Studio project in this link:
  &lt;br /&gt;&lt;a title="http://blogs.microsoft.co.il/files/folders/1078707/download.aspx" href="http://blogs.microsoft.co.il/files/folders/1078707/download.aspx"&gt;http://blogs.microsoft.co.il/files/folders/1078707/download.aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1078708" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/.net/default.aspx">.net</category></item><item><title>Enterprise Wiki site template vs. Wiki Library template</title><link>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/04/15/enterprise-wiki-site-template-vs-wiki-library-template.aspx</link><pubDate>Mon, 16 Apr 2012 00:00:52 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1065594</guid><dc:creator>Itay Shakury</dc:creator><slash:comments>26</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/itaysk/rsscomments.aspx?PostID=1065594</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/04/15/enterprise-wiki-site-template-vs-wiki-library-template.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/itaysk/Wiki-Linking-1_0B4F1AC8.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;float:right;border-top:0px;border-right:0px;padding-top:0px;" title="Wiki-Linking-1" border="0" alt="Wiki-Linking-1" align="right" src="http://blogs.microsoft.co.il/blogs/itaysk/Wiki-Linking-1_thumb_1E8FD167.png" width="349" height="225" /&gt;&lt;/a&gt;We all know wikis and how they work. It&amp;#39;s a quick way to create inter-connected items of unstructured data.    &lt;br /&gt;SharePoint 2010 Introduces two wiki solutions that appear similar on first sight, but are actually different. In this post I will cover technical differences between the two.&lt;/p&gt;  &lt;p&gt;First is the &amp;quot;&lt;strong&gt;Enterprise Wiki&lt;/strong&gt;&amp;quot; site template. It&amp;#39;s a template that can be used to create site collections, or sub-sites. The Enterprise Wiki site template creates a site that is dedicated to wiki content. The main component in the site is the &amp;quot;Pages&amp;quot; Library. We will explorer it later.&lt;/p&gt;  &lt;p&gt;Second is the &amp;quot;Wiki Page Library&amp;quot; list template. This Wiki Library can host wiki pages. It can be created in any kind of site.    &lt;br /&gt;As a matter of fact, this Wiki Library list template is used as the default pages library in the &amp;quot;Team Site&amp;quot; site template.&lt;/p&gt;  &lt;p&gt;According to &lt;a href="http://msdn.microsoft.com/en-us/library/ee721051.aspx" target="_blank"&gt;this article on MSDN&lt;/a&gt;, here is a short comparison between the two:&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;     &lt;tr&gt;       &lt;td valign="top"&gt;         &lt;p&gt;If you want to:&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p&gt;Use this site template:&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;         &lt;p&gt;Encourage one-to-many communication&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p&gt;Team Site&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;         &lt;p&gt;Encourage many-to-many communication&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p&gt;Enterprise Wiki&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;         &lt;p&gt;Offer a structured exchange of information&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p&gt;Team Site&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;         &lt;p&gt;Enable a collaborative exchange of information&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p&gt;Enterprise Wiki&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;         &lt;p&gt;Insert images or files in a pages&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p&gt;Team Site or Enterprise Wiki&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top"&gt;         &lt;p&gt;Mark pages for easier reference by tagging them with enterprise keywords&lt;/p&gt;       &lt;/td&gt;        &lt;td valign="top"&gt;         &lt;p&gt;Enterprise Wiki&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;These are nice guidelines, but what is the real difference of each?   &lt;br /&gt;I am now going to go through the detailed process that I took for investigating the case. You can skip to the end if you want the summary.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;Wiki Page Library&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;The template is part of the feature called &amp;quot;WebPageLibrary&amp;quot;. In this feature, you can find the list definition at: &amp;quot;14\TEMPLATES\FEATURES\WebPageLibrary\ListTemlpates\WebPageLibrary.xml&amp;quot;.   &lt;br /&gt;If you look at it, you&amp;#39;ll notice that the list template id is 119, and BaseType=&amp;quot;1&amp;quot;, which means it is a regular document library.&lt;/p&gt;  &lt;p&gt;If we take a look at the schema.xml file at &amp;quot;14\TEMPLATES\FEATURES\WebPageLibrary\WebPageLib\schema.xml&amp;quot;, we will see that the template associates a content type with ID 0x010108 to the library. This content type is called &amp;quot;WikiDocument&amp;quot;, and is defined in: &amp;quot;14\TEMPLATES\FEATURES\ctypes\ctypeswss.xml&amp;quot;. It inherits from the base &amp;quot;Document&amp;quot; content type, does 2 things: Add the &amp;quot;WikiField&amp;quot;, and remove the &amp;quot;Title&amp;quot; field.    &lt;br /&gt;The &amp;quot;WikiField&amp;quot; field is what holds the content of the page.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Enterpries Wiki&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;This is an entierly different beast. First of all, it&amp;#39;s a site definition. You will find the &amp;quot;Enterprise Wiki&amp;quot; site definition at 14\TEMPLATE\1033\XML\webtempsps.xml. Let&amp;#39;s take a closer look at it.   &lt;br /&gt;The site definition onet.xml file is at: 14\TEMPLATE\SiteTemplates\ENTERWIKI\XML\onet.xml. In here, we can see that this is actually a publishing site (publishing features, such as &amp;quot;Publishing 22A9EF51-737B-4ff2-9346-694633FE4416&amp;quot; are activated).&lt;/p&gt;  &lt;p&gt;In addition to the standatd pablishing features, there&amp;#39;s an additional feature with id &amp;quot;76D688AD-C16E-4cec-9B71-7B7F0D79B9CD&amp;quot;. This is the EnterpriseWiki feature, you can find it&amp;#39;s source at: 14\TEMPALTE\FEATURES\EnterpriseWiki.&lt;/p&gt;  &lt;p&gt;If you take a look at EnterpriseWikiContentTypeBinding.xml, you will see that the feature takes the default pages library that is created with the publishing infrastructure, and binds to it 2 content types. One is the standard Redirect Page content type, and the other is the Enterprise Wiki content type.    &lt;br /&gt;The Enterprise Wiki content type is defined at: 14\TEMPALTE\FEATURES\EnterpriseWikiContentTypes, and defines the following fields: ModifiedBy, PublishingPageContent, Rating, RatingCount.&lt;/p&gt;  &lt;p&gt;If we take a look at the page layout at: 14\TEMPALTE\FEATURES\EnterpriseWikiLayouts\PageLayouts\EnterpriseWiki.aspx, we will see that the field that holds the content of the page is &amp;quot;PublishingPageContent&amp;quot;. This field is just like the &amp;quot;WikiField&amp;quot; field that we discussed earlier.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Rendering&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Handling wiki style markup is integrated into SharePoint foundation. From what I have found, it seems that the translation from wiki syntax to html is done in the field level (not UI control). The class &amp;quot;SPFieldMultilineText&amp;quot; has a property called &amp;quot;WikiLinking&amp;quot; (boolean), that toggles the feature on or off.    &lt;br /&gt;For publishing pages, the &amp;quot;HtmlField&amp;quot; inherits indirectly from SPFieldMultilineText, so it supports this too.&lt;/p&gt;  &lt;p&gt;You can use this feature with regular publishing pages as well (not nessicarely wiki page layouts).   &lt;br /&gt;If you look at the source of a publishing page you will see a line similar to this: document.getElementById(&amp;#39;ctl00_PlaceHolderMain_PageContent_RichHtmlField_displayContent&amp;#39;).WikiLinking = &amp;#39;on&amp;#39;;    &lt;br /&gt;This controls whether or not the wiki syntax translation is active.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Summary&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;SharePoint has different 2 solutions for wiki style editing:&lt;/p&gt;  &lt;p&gt;1. Wiki Library - a web pages library that uses the &amp;quot;Wiki Document&amp;quot; content type. This content type has a field called &amp;quot;WikiField&amp;quot; to hold the wiki content.&lt;/p&gt;  &lt;p&gt;2. Enterprise Wiki - a site definition that is based on the publishing infrustructure. As such, it is based on the built in &amp;quot;Pages&amp;quot; library. It uses a content type called &amp;quot;Enterprise Wiki&amp;quot;, in which the field &amp;quot;PublishingPageContent&amp;quot; is used to hold wiki content.&lt;/p&gt;  &lt;p&gt;This knowledge can be helpful if you are developing solutions that are usign the wiki features programmatically.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;-- My name is Itay Shakury, and I&amp;#39;m a SharePoint consultant --&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1065594" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/DEV/default.aspx">DEV</category></item><item><title>More Findings from reading SharePoint 15 CTP SDK</title><link>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/03/27/more-findings-from-reading-sharepoint-15-ctp-sdk.aspx</link><pubDate>Wed, 28 Mar 2012 02:21:34 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1045673</guid><dc:creator>Itay Shakury</dc:creator><slash:comments>4</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/itaysk/rsscomments.aspx?PostID=1045673</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/03/27/more-findings-from-reading-sharepoint-15-ctp-sdk.aspx#comments</comments><description>&lt;p&gt;A while ago, Microsoft has released a CTP (Community Tech Preview) version for the SDK (Software Development Kit) of the next version of SharePoint (aka SharePoint 15).    &lt;br /&gt;I have already discussed Apps in a &lt;a href="http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/03/26/sharepoint-15-apps-as-documented-in-the-ctp-sdk.aspx" target="_blank"&gt;previous post&lt;/a&gt;, but there’s even more to learn from the new CTP SDK.&lt;/p&gt;  &lt;p&gt;Disclaimer: This post is my personal take from browsing through the CTP SDK. This is not an official announcement. All the info this post is based upon is publicly available here: &lt;a href="http://www.microsoft.com/download/en/confirmation.aspx?id=28768"&gt;http://www.microsoft.com/download/en/confirmation.aspx?id=28768&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SPPageContentManagerb - &lt;/strong&gt;“&lt;em&gt;Manages all the resource content that may be registered on a SharePoint page, including script files, inline scripts, style files, inline styles, and hidden input fields. Spweb Ensures that the content can be either appropriately placed on a fully-rendered HTML page or correctly transmitted to a browser in the case of a partial page load.&lt;/em&gt;”&lt;/p&gt;  &lt;p&gt;This class must work closely with this new feature:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;MdsCompliantAttribute&lt;/strong&gt; – “&lt;em&gt;Indicates whether the script, style, and field registrations of a class are compliant with the Minimal Download Strategy (MDS) framework.”&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;So this is an attribute that can be applied to controls (?), that specifies weather or not the control adheres to “Minimal Download Strategy (MDS)”. Googling the phrase “Minimal Download Strategy” took me to &lt;a href="http://msdn.microsoft.com/en-us/library/hh645522(office.12).aspx" target="_blank"&gt;this&lt;/a&gt; page that explains what MDS is about: “&lt;em&gt;The minimal download strategy will use a single .aspx file (start.aspx) for your pages, with the actual &lt;/em&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd905493(office.12).aspx#gt_433a4fb7-ef84-46b0-ab65-905f5e3a80b1"&gt;&lt;em&gt;URL&lt;/em&gt;&lt;/a&gt;&lt;em&gt; encoded in the text following the hashmark (‘#’). When navigating from page to page, only the changes between two compatible pages will be downloaded. Fewer bytes will be downloaded and the page will appear more quickly.&lt;/em&gt;”     &lt;br /&gt;So this is some kind of hardcore AJAX, in which all pages are actually a single page, and switching between pages will only load differences (so the chrome stays fixed). I wonder if this will get the same kind of bad reputation that the (pretty similar) UpdatePanel control from ASP.net has got.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Search from Client OM&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;New namespace called Microsoft.SharePoint.Client.Search.Query that indicates the Client Object Model now supports using SharePoint’s search.    &lt;br /&gt;Up until now we could only use web services to do this. Now we have convenient and familiar object model.     &lt;br /&gt;The namespace has classes like &lt;em&gt;Query&lt;/em&gt;, &lt;em&gt;KeywordQuery&lt;/em&gt; (that inharites from Query), and &lt;em&gt;ResultTable&lt;/em&gt;. This is similar to what we know from the server OM.     &lt;br /&gt;There’s also a new &lt;em&gt;SearchExecutor&lt;/em&gt; class that execute the queries (like ClientContext.Execute).&lt;/p&gt;  &lt;p&gt;Looking forward to more interesting stuff in SharePoint 15 :)&lt;/p&gt;  &lt;p&gt;Disclaimer: This post is my personal take from browsing through the CTP SDK. This is not an official announcement. All the info this post is based upon is publicly available here: &lt;a href="http://www.microsoft.com/download/en/confirmation.aspx?id=28768"&gt;http://www.microsoft.com/download/en/confirmation.aspx?id=28768&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;-- My name is Itay Shakury, and I’m a SharePoint Consultant --&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1045673" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/sharepoint+15/default.aspx">sharepoint 15</category></item><item><title>SharePoint 15 “Apps” (as documented in the CTP SDK)</title><link>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/03/26/sharepoint-15-apps-as-documented-in-the-ctp-sdk.aspx</link><pubDate>Tue, 27 Mar 2012 03:25:22 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1044348</guid><dc:creator>Itay Shakury</dc:creator><slash:comments>9</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/itaysk/rsscomments.aspx?PostID=1044348</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/03/26/sharepoint-15-apps-as-documented-in-the-ctp-sdk.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/itaysk/windows_store_tile_13E48626.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;float:right;border-top:0px;border-right:0px;padding-top:0px;" title="windows_store_tile" border="0" alt="windows_store_tile" align="right" src="http://blogs.microsoft.co.il/blogs/itaysk/windows_store_tile_thumb_1F99CD58.png" width="131" height="131" /&gt;&lt;/a&gt;A while ago, Microsoft has released a CTP (Community Tech Preview) version for the SDK (Software Development Kit) of the next version of SharePoint (aka SharePoint 15).     &lt;br /&gt;Browsing through it I have learned about the new concept of &lt;em&gt;Apps&lt;/em&gt; in SharePoint 15 (codename). In this post I will share my findings and conclusions.&lt;/p&gt;  &lt;p&gt;Disclaimer: This post is my personal take from browsing through the CTP SDK. This is not an official announcement. All the info this post is based upon is publicly available here: &lt;a href="http://www.microsoft.com/download/en/confirmation.aspx?id=28768"&gt;http://www.microsoft.com/download/en/confirmation.aspx?id=28768&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;I start by noticing the &lt;em&gt;SPApp&lt;/em&gt; object, that lies in the &lt;em&gt;Microsoft.SharePoint.Administration &lt;/em&gt;namespace. It “&lt;em&gt;Represents an app loaded onto Microsoft SharePoint Server and ready to be installed.&lt;/em&gt;”     &lt;br /&gt;Right next to the &lt;em&gt;SPApp &lt;/em&gt;Object, we see the &lt;em&gt;SPAppCatlog &lt;/em&gt;class which “&lt;em&gt;Represents all of the &lt;/em&gt;&lt;em&gt;SPAppInstance&lt;/em&gt;&lt;em&gt; objects installed on an instance of Microsoft SharePoint Server. It provides querying capabilities for discovering installations.&lt;/em&gt;”. Naturally, if we are going to have apps, we need some sort of an App Store to obtain apps from.&lt;/p&gt;  &lt;p&gt;If we drill down a level into the &lt;em&gt;SPAppCatalog&lt;/em&gt;, we will see that it has a &lt;em&gt;GetAppInstance&lt;/em&gt; method, that “&lt;em&gt;Gets all the &lt;/em&gt;&lt;em&gt;SPAppInstance&lt;/em&gt;&lt;em&gt; objects installed at a given &lt;/em&gt;&lt;em&gt;SPWeb&lt;/em&gt;&lt;em&gt;.&lt;/em&gt;”. Also, the &lt;em&gt;SPAppInstance&lt;/em&gt; class says it “&lt;em&gt;Represents an &lt;/em&gt;&lt;em&gt;SPApp&lt;/em&gt;&lt;em&gt; object installed to a specific &lt;/em&gt;&lt;em&gt;SPWeb&lt;/em&gt;&lt;em&gt; site.”&lt;/em&gt;. So apps are scoped to the SPWeb level – cool.&lt;/p&gt;  &lt;p&gt;Continuing to the &lt;em&gt;SPWebApplication&lt;/em&gt; class, we find that is has a new method called &lt;em&gt;IsUserLicensedForEntity&lt;/em&gt;, that “&lt;em&gt;Checks if the currently logged in user has the proper license to access the specified entity.&lt;/em&gt;” If we going to have an App Store like system, we need to have a mechanism to enforce licensing.&lt;/p&gt;  &lt;p&gt;What more do we know about apps from real world? They need your permissions to access your data. This is usually done (in real world) with the OAuth protocol, and SharePoint 15 apparently supports this too! There’s a new namespace called &lt;em&gt;Microsoft.SharePoint.IdentityModel.OAuth2&lt;/em&gt; that will probably contain the basis for this, and some classes in &lt;em&gt;Microsoft.SharePoint&lt;/em&gt; like &lt;em&gt;SPApplicationCredentials&lt;/em&gt; and &lt;em&gt;SPAppPrincipalPermissionsManager&lt;/em&gt; that will probably allow programmatic handling of permissions.&lt;/p&gt;  &lt;p&gt;There’s another new namespace called &lt;em&gt;Microsoft.SharePoint.Administration.AppDeployment&lt;/em&gt; that contains two classes – &lt;em&gt;DatabaseProviderConstants&lt;/em&gt;, and &lt;em&gt;DatabaseProviderTypePersistedObject&lt;/em&gt;. So there’s apparently something with a database for an app. The SPWeb class also has new properties regarding App DBs – for example the &lt;em&gt;AppDataBaseName&lt;/em&gt; property that “&lt;em&gt;Gets the name of the app database associated with this Web.&lt;/em&gt;”. Frankly, this is still a mystery for me since it’s use is not documented in the CTP SDK, and not very self explanatory.&lt;/p&gt;  &lt;p&gt;In conclusion:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;SharePoint has a new concept of Apps &lt;/li&gt;    &lt;li&gt;Apps are scoped to SPWeb &lt;/li&gt;    &lt;li&gt;Apps are distributed via the AppCatalog &lt;/li&gt;    &lt;li&gt;There’s built in support for licensing apps &lt;/li&gt;    &lt;li&gt;Apps can ask for permission using OAuth &lt;/li&gt;    &lt;li&gt;There’s something with app databases yet to be clarified &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;This is a very interesting direction that the SharePoint team is taking, and probably revolutionary in the SharePoint world. I hope we can here more details soon.&lt;/p&gt;  &lt;p&gt;Disclaimer: This post is my personal take from browsing through the CTP SDK. This is not an official announcement. All the info this post is based upon is publicly available here: &lt;a href="http://www.microsoft.com/download/en/confirmation.aspx?id=28768"&gt;http://www.microsoft.com/download/en/confirmation.aspx?id=28768&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;-- My name is Itay Shakury, and I’m a SharePoint Consultant --&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1044348" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/sharepoint+15/default.aspx">sharepoint 15</category></item><item><title>Storing Configuration Settings For Timer Jobs</title><link>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/03/23/storing-configuration-settings-for-timer-jobs.aspx</link><pubDate>Fri, 23 Mar 2012 19:58:07 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1040812</guid><dc:creator>Itay Shakury</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/itaysk/rsscomments.aspx?PostID=1040812</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/03/23/storing-configuration-settings-for-timer-jobs.aspx#comments</comments><description>&lt;p&gt;When you develop a custom timer job, there is often a need to store configuration settings.    &lt;br /&gt;The best way to do this is using the Hierarchical Object Store in SharePoint, by creating an &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.sppersistedobject.aspx" target="_blank"&gt;SPPerststedObject&lt;/a&gt;. There are plenty of articles out there that tell you to how to do this.    &lt;br /&gt;For more info on this subject, see this:     &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc406686(office.12).aspx"&gt;http://msdn.microsoft.com/en-us/library/cc406686(office.12).aspx&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/hh528519.aspx"&gt;http://msdn.microsoft.com/en-us/library/hh528519.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So it’s called &amp;quot;&lt;em&gt;hierarchical&lt;/em&gt;” object store, because you have to attach the settings to a certain object in the SharePoint object model, and that object must support this by inheriting from SPPersistedObject.&lt;em&gt;&amp;#160;&lt;/em&gt;Most of those articles shows you how to attach settings to SPFarm, SPWebApplication, or SPSiteCollection objects, but as a matter of fact, the SPJobDefinition class is also a SPPersistedObject!&lt;/p&gt;  &lt;p&gt;This means that &lt;strong&gt;you can attach settings to the job object directly&lt;/strong&gt;, and not leave them hanging at the farm or a higher level. This has two benefits:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;It’s more organized to keep timer job related settings at the timer job level (and not web application level for example)&lt;/li&gt;    &lt;li&gt;When you delete the timer job, the settings are deleted as well&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Here’s a sample:&lt;/p&gt;  &lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;   &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;     &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; SPWebApplication wa = SPWebApplication.Lookup(&lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; Uri(&lt;span style="color:#006080;"&gt;&amp;quot;http://MySP&amp;quot;&lt;/span&gt;));&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; SPJobDefinition job = wa.JobDefinitions.First(j =&amp;gt; j.Name == &lt;span style="color:#006080;"&gt;&amp;quot;MyTimerJob&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt;&amp;#160; &lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum4"&gt;   4:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//Store the settings&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum5"&gt;   5:&lt;/span&gt; MyJobSettings settings = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; MyJobSettings(&lt;span style="color:#006080;"&gt;&amp;quot;settings&amp;quot;&lt;/span&gt;, job); &lt;span style="color:#008000;"&gt;//here we set job as the parent&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum6"&gt;   6:&lt;/span&gt; settings.settings1 = &lt;span style="color:#006080;"&gt;&amp;quot;Sample Data&amp;quot;&lt;/span&gt;;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum7"&gt;   7:&lt;/span&gt; settings.Update();&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;And the reading:&lt;/p&gt;

&lt;div style="border-bottom:silver 1px solid;text-align:left;border-left:silver 1px solid;padding-bottom:4px;line-height:12pt;background-color:#f4f4f4;margin:20px 0px 10px;padding-left:4px;width:97.5%;padding-right:4px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;max-height:200px;font-size:8pt;overflow:auto;border-top:silver 1px solid;cursor:text;border-right:silver 1px solid;padding-top:4px;" id="codeSnippetWrapper"&gt;
  &lt;div style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;" id="codeSnippet"&gt;
    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum1"&gt;   1:&lt;/span&gt; &lt;span style="color:#008000;"&gt;//Read the settings&lt;/span&gt;&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum2"&gt;   2:&lt;/span&gt; MyJobSettings res = job.GetChild&amp;lt;MyJobSettings&amp;gt;(&lt;span style="color:#006080;"&gt;&amp;quot;settings&amp;quot;&lt;/span&gt;);&lt;/pre&gt;


    &lt;pre style="border-bottom-style:none;text-align:left;padding-bottom:0px;line-height:12pt;background-color:#f4f4f4;margin:0em;border-left-style:none;padding-left:0px;width:100%;padding-right:0px;font-family:&amp;#39;Courier New&amp;#39;, courier, monospace;direction:ltr;border-top-style:none;color:black;border-right-style:none;font-size:8pt;overflow:visible;padding-top:0px;"&gt;&lt;span style="color:#606060;" id="lnum3"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt; setting1 = res.setting1;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;-- My name is Itay Shakury, and I’m a SharePoint consultant --&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1040812" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/DEV/default.aspx">DEV</category></item><item><title>Follow Up on My SharePoint Extreme Session on Claims Based Authentication</title><link>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/03/22/follow-up-on-my-sharepoint-extreme-session-on-claims-based-authentication.aspx</link><pubDate>Thu, 22 Mar 2012 18:56:58 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1040100</guid><dc:creator>Itay Shakury</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/itaysk/rsscomments.aspx?PostID=1040100</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/03/22/follow-up-on-my-sharepoint-extreme-session-on-claims-based-authentication.aspx#comments</comments><description>&lt;p dir="rtl" align="right"&gt;בכנס SharePoint Extreme האחרון העברתי מצגת על Claims Based Authentication עם SharePoint 2010.    &lt;br /&gt;מכיוון שזהו נושא חדש יחסית, המצגת התמקדה בעיקר בהיכרות עם מה זה בכלל Claims Based Authenticatoin, ואיך זה עובד.     &lt;br /&gt;לאחר המצגת קיבלתי שאלות בנוגע לתהליך הטכני. פוסט זה בא להבהיר את התהליך.&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;התהליך שהצגתי הוא כזה:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;div align="right"&gt;משתמש ניגש לשרת SP&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="right"&gt;המשתמש מופנה ל STS&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="right"&gt;STS מאמת את המשתמש&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="right"&gt;STS מחזיר למשתמש Token&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="right"&gt;המשתמש ניגש אל ה SP, הפעם עם ה Token&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="right"&gt;SP מאשר את ה Token ומאפשר גישה&lt;/div&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p dir="rtl" align="right"&gt;השאלה העיקרית הייתה בנוגע לשימוש ב Cookies, ואיך כל זה עובד עם מגבלות כמו Cross-Domain.&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;הדרך שבה זה עובד בצורה טכנית היא כזו (מספרי השורות תואמים לשלבים שתוארו מקודם):&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;     &lt;div align="right"&gt;משתמש מבצע HTTP GET ל SP&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="right"&gt;SP מחזיר 302 Redirect. בסופו של דבר המשתמש מופנה אל הכתובת של ה STS (בד”כ סדרה של הפניות) &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="right"&gt;הדפדפן ניגש אל ה STS, המשתמש מאומת באמצעות דף ה Login&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="right"&gt;ה STS מחזיר למשתמש דף שמכיל את ה Token (בגוף הדף, בד”כ כ hidden field), &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="right"&gt;באותו דף ישנו קוד Javascript שגורם לדפדפן לעשות HTTP POST אל ה SP, עם ה Token.&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="right"&gt;SP מקבל את הבקשה ויודע לנתח אותה בהתאם&lt;/div&gt;   &lt;/li&gt; &lt;/ol&gt;  &lt;p dir="rtl" align="right"&gt;אם כן, השאלה הבאה היא איך Cookies נכנסים לתמונה?&lt;/p&gt;  &lt;p dir="rtl" align="right"&gt;ה STS, או ה SP יכולים להשתמש ב cookies (או באיזו טכנולוגיה שהם רוצים) כדי לשמר session עם המשתמש.    &lt;br /&gt;כלומר, כדי שתהליך ההזדהות לא יקרה בכל פעם, ה SP מנפיק למשתמש cookie שמשאיר אותו מזוהה במהלך השימוש שלו באתר (ע”ע FedAuth).     &lt;br /&gt;באותה מידה ה STS יכול להנפיק למשתמש cookie כדי לזהות בצורה אוטומאטית את המשתמש אם הגיעה בקשה נוספת להזדהות.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1040100" width="1" height="1"&gt;</description></item><item><title>I’m Speaking at SharePoint Extreme 2012</title><link>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/03/12/i-m-speaking-at-sharepoint-extreme-2012.aspx</link><pubDate>Mon, 12 Mar 2012 23:30:20 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1032173</guid><dc:creator>Itay Shakury</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/itaysk/rsscomments.aspx?PostID=1032173</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/itaysk/archive/2012/03/12/i-m-speaking-at-sharepoint-extreme-2012.aspx#comments</comments><description>&lt;p style="direction:rtl;" align="right"&gt;ביום שלישי הקרוב עד יום חמישי, 13-15/3/2012, יתקיים כנס SharePoint Extreme – כנס מקצועי לחלוטין עם הרצאות ממוקדות לקהלי יעד שונים בנושאי SharePoint.    &lt;br /&gt;אני ארצה ביום חמישי במסלול &lt;strong&gt;Real World SharePoint Architecture&lt;/strong&gt; הרצאה על &lt;strong&gt;Claims Based Authentication&lt;/strong&gt; ב SharePoint 2010.     &lt;br /&gt;בהרצאה אציג את העולם של Claims Based Authenticatoin, את היתרונות והמניעים לטכנולוגיה, את השילוב עם SharePoint, ותרחישים לדוגמא שמתבססים עליה.&lt;/p&gt;  &lt;p style="direction:rtl;" align="right"&gt;(ההרשמה לכנס כרוכה בתשלום)&lt;/p&gt;  &lt;p style="direction:rtl;" align="right"&gt;לפרטים נוספים והרשמה:    &lt;br /&gt;&lt;a href="http://www.microsoft.com/israel/sharepointExtreme/content/Lectures/13036.aspx"&gt;http://www.microsoft.com/israel/sharepointExtreme/content/Lectures/13036.aspx&lt;/a&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p style="direction:rtl;" align="right"&gt;&lt;a href="http://www.microsoft.com/israel/sharepointExtreme/content/Lectures/13036.aspx" target="_blank"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="28392_Microsoft_mail_signature1" border="0" alt="28392_Microsoft_mail_signature1" src="http://blogs.microsoft.co.il/blogs/itaysk/28392_Microsoft_mail_signature1_5BC63762.jpg" width="364" height="84" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1032173" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/Hebrew/default.aspx">Hebrew</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/itaysk/archive/tags/Events/default.aspx">Events</category></item></channel></rss>