<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dotnet.org.za/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">Garret Besser</title><subtitle type="html">Bowser&amp;#39;s Domain</subtitle><id>http://dotnet.org.za/besserg/atom.aspx</id><link rel="alternate" type="text/html" href="http://dotnet.org.za/besserg/default.aspx" /><link rel="self" type="application/atom+xml" href="http://dotnet.org.za/besserg/atom.aspx" /><generator uri="http://communityserver.org" version="3.0.20611.960">Community Server</generator><updated>2006-02-03T17:29:00Z</updated><entry><title>I know they're the same on the wire...</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/besserg/archive/2006/02/11/50066.aspx" /><id>http://dotnet.org.za/besserg/archive/2006/02/11/50066.aspx</id><published>2006-02-11T05:35:00Z</published><updated>2006-02-11T05:35:00Z</updated><content type="html">&lt;p&gt;I find myself having to write the following type of code quite often:&lt;/p&gt;&lt;o:p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;private&lt;/span&gt;&lt;span&gt; TypeB ConvertTypeAToTypeB(TypeA request){&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;const&lt;/span&gt; &lt;span&gt;string&lt;/span&gt; reqNamespace = &lt;span&gt;"www.xxx/yyy"&lt;/span&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;try&lt;/span&gt; {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;//Convert TypeA --&amp;gt; TypeB&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;XmlSerializer&lt;/span&gt; serializer = &lt;span&gt;new&lt;/span&gt; &lt;span&gt;XmlSerializer&lt;/span&gt;(&lt;span&gt;typeof&lt;/span&gt;(TypeA), &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;reqNamespace);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;MemoryStream&lt;/span&gt; stream = &lt;span&gt;new&lt;/span&gt; &lt;span&gt;MemoryStream&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;serializer.Serialize(stream, request);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;stream.Position = 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;XmlSerializer&lt;/span&gt; mySerializerLogger = &lt;span&gt;new&lt;/span&gt; &lt;span&gt;XmlSerializer&lt;/span&gt;(&lt;span&gt;typeof&lt;/span&gt;(typeB), calcReqNamespace);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;TypeB typeB = (TypeB)mySerializerLogger.Deserialize(stream);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;return&lt;/span&gt; typeB;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;} &lt;span&gt;catch&lt;/span&gt; (&lt;span&gt;Exception&lt;/span&gt; ex) {&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;throw&lt;/span&gt; ex;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;span&gt;
&lt;p class=MsoNormal&gt;&lt;font face="Times New Roman" size=3&gt;It would be much better to do it in a generic way once&lt;/font&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;font face="Times New Roman" size=3&gt;Would be great if we had this built into the framework, or as a snippet – which is what I’ve done.&lt;/font&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;o:p&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/p&gt;&lt;o:p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;private&lt;/span&gt;&lt;span&gt; T Convert&amp;lt;T, V&amp;gt;(V v, &lt;span&gt;string&lt;/span&gt; namespace) &lt;span&gt;//where T:ISerializable where V:ISerializable&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;// TODO : Require that both types have the XmlRootAttribute attribute&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;T t = &lt;span&gt;default&lt;/span&gt;(T);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;try&lt;/span&gt; {&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;// TODO : Check that both types have the same namespace&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;XmlSerializer&lt;/span&gt; serializer = &lt;span&gt;new&lt;/span&gt; &lt;span&gt;XmlSerializer&lt;/span&gt;(&lt;span&gt;typeof&lt;/span&gt;(V), namespace);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;MemoryStream&lt;/span&gt; stream = &lt;span&gt;new&lt;/span&gt; &lt;span&gt;MemoryStream&lt;/span&gt;();&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;serializer.Serialize(stream, v);&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class=MsoNormal&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;stream.Position = 0;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;p class=MsoNormal&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlSerializer mySerializerLogger = new XmlSerializer(typeof(T), _namespace);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t = (T)mySerializerLogger.Deserialize(stream);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} catch (Exception e) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw e;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/p&gt;
&lt;p class=MsoNormal&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return t; 
&lt;p class=MsoNormal&gt;}&lt;/p&gt;
&lt;p class=MsoNormal&gt;
&lt;p class=MsoNormal&gt;
&lt;p&gt;Feel much better about this now:)&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/o:p&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/besserg/archive/2006/02/11/50066.aspx&amp;amp;;subject=I+know+they%27re+the+same+on+the+wire..." target="_blank" title = "Post http://dotnet.org.za/besserg/archive/2006/02/11/50066.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/besserg/archive/2006/02/11/50066.aspx&amp;amp;;title=I+know+they%27re+the+same+on+the+wire..." target="_blank" title = "Post http://dotnet.org.za/besserg/archive/2006/02/11/50066.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/besserg/archive/2006/02/11/50066.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/besserg/archive/2006/02/11/50066.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/besserg/archive/2006/02/11/50066.aspx&amp;amp;title=I+know+they%27re+the+same+on+the+wire..." target="_blank" title = "Post http://dotnet.org.za/besserg/archive/2006/02/11/50066.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/besserg/archive/2006/02/11/50066.aspx&amp;amp;;title=I+know+they%27re+the+same+on+the+wire..." target="_blank" title = "Post http://dotnet.org.za/besserg/archive/2006/02/11/50066.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/besserg/archive/2006/02/11/50066.aspx&amp;amp;;title=I+know+they%27re+the+same+on+the+wire...&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/besserg/archive/2006/02/11/50066.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=50066" width="1" height="1"&gt;</content><author><name>Garnet</name><uri>http://dotnet.org.za/members/Garnet.aspx</uri></author></entry><entry><title>TypeForwardedTo</title><link rel="alternate" type="text/html" href="http://dotnet.org.za/besserg/archive/2006/02/03/49841.aspx" /><id>http://dotnet.org.za/besserg/archive/2006/02/03/49841.aspx</id><published>2006-02-03T17:29:00Z</published><updated>2006-02-03T17:29:00Z</updated><content type="html">&lt;p&gt;I saw that the TypeForwardedToAttribute class is included in the new qualifications for microsoft enterprise development.&lt;/p&gt;
&lt;p&gt;Having never heard of this class before, I needed to know when, where&amp;nbsp;and how. So I did a search and came up with the following:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.heege.net/blog/PermaLink,guid,8d076332-4fb0-44b5-a829-4c4d653de2d6.aspx"&gt;http://www.heege.net/blog/PermaLink,guid,8d076332-4fb0-44b5-a829-4c4d653de2d6.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;- &lt;a href="http://notgartner.com/posts/2955.aspx"&gt;http://notgartner.com/posts/2955.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Great - I now understood 'when' and 'where', now only for the 'how'.&lt;/p&gt;
&lt;p&gt;A simple solution that implements the need for this assembly attribute.&amp;nbsp;Client references assembly A which has type TypeA in it.&amp;nbsp;Move the type from assembly A to&amp;nbsp;assembly B,&amp;nbsp;with attribute added to assemblyinfo file of assembly A --&amp;gt; compile A, which will &amp;nbsp;compile B --&amp;gt; great, my client should still work...&lt;/p&gt;
&lt;p&gt;Client continues to throw a TypeLoadException when instantiating the type expected to be in assembly A. I've ensured that I was not building the client executable when building assembly A, by referencing assembly A by directory instead of project. [ ; ) ]&lt;/p&gt;
&lt;p&gt;Unfortunately, I am still getting a TypeLoadException...&lt;/p&gt;
&lt;p&gt;Update:&lt;/p&gt;
&lt;div class=commentsbody&gt;Hi, The problem was solved by a colleague at work. The problem was that when moving the type from assembly A to assembly B, you need to keep the type in the same namespace as the type originally had in assembly A. Thanks Roaan &lt;/div&gt;
&lt;div class = "shareblock"&gt;&lt;strong&gt;Share this post:&lt;/strong&gt; &lt;a href = "mailto:?body=Thought you might like this: http://dotnet.org.za/besserg/archive/2006/02/03/49841.aspx&amp;amp;;subject=TypeForwardedTo" target="_blank" title = "Post http://dotnet.org.za/besserg/archive/2006/02/03/49841.aspx"&gt;email it!&lt;/a&gt; |  &lt;a href = "http://del.icio.us/post?url=http://dotnet.org.za/besserg/archive/2006/02/03/49841.aspx&amp;amp;;title=TypeForwardedTo" target="_blank" title = "Post http://dotnet.org.za/besserg/archive/2006/02/03/49841.aspx"&gt;bookmark it!&lt;/a&gt; |  &lt;a href = "http://www.digg.com/submit?url=http://dotnet.org.za/besserg/archive/2006/02/03/49841.aspx&amp;amp;;phase=2" target="_blank" title = "Post http://dotnet.org.za/besserg/archive/2006/02/03/49841.aspx"&gt;digg it!&lt;/a&gt; |  &lt;a href = "http://reddit.com/submit?url=http://dotnet.org.za/besserg/archive/2006/02/03/49841.aspx&amp;amp;title=TypeForwardedTo" target="_blank" title = "Post http://dotnet.org.za/besserg/archive/2006/02/03/49841.aspx"&gt;reddit!&lt;/a&gt; |  &lt;a href = "http://www.dotnetkicks.com/submit/?url=http://dotnet.org.za/besserg/archive/2006/02/03/49841.aspx&amp;amp;;title=TypeForwardedTo" target="_blank" title = "Post http://dotnet.org.za/besserg/archive/2006/02/03/49841.aspx"&gt;kick it!&lt;/a&gt; |  &lt;a href = "https://favorites.live.com/quickadd.aspx?marklet=1&amp;amp;;mkt=en-us&amp;amp;;url=http://dotnet.org.za/besserg/archive/2006/02/03/49841.aspx&amp;amp;;title=TypeForwardedTo&amp;amp;;top=1" target="_blank" title = "Post http://dotnet.org.za/besserg/archive/2006/02/03/49841.aspx"&gt;live it!&lt;/a&gt;&lt;/div&gt;&lt;img src="http://dotnet.org.za/aggbug.aspx?PostID=49841" width="1" height="1"&gt;</content><author><name>Garnet</name><uri>http://dotnet.org.za/members/Garnet.aspx</uri></author></entry></feed>