By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
424,948 Members | 663 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 424,948 IT Pros & Developers. It's quick & easy.

Generics and their resulting class. Possible to obtain?

P: n/a
Hi,
We need to serialize (binary) objects containing generic collections. The
thing is, when we try to get the objects back (deserialize) with a different
instance of the application, we receive an exception stating the constructor
of the generic class does not exist. So Is there a way to obtain the
resulting classes of the generics we use so we can add them as "normal" code
in our app? We can develop our own starting from non-generic collections,
but then we would have to develop our own methods and maintain them. The
generics are already debuged and maintained by MS so we would like to
generate them with the same generator the framework generates them if
possible.

So if I summarize what we want : We want to take the resulting class from a
given generic and "copy-paste" the code and create a "user class" that we
will add to our project.

Is it possible?

Thanks

ThunderMusic
Aug 14 '07 #1
Share this Question
Share on Google+
8 Replies


P: n/a
On Aug 14, 7:11 am, "ThunderMusic"
<NoSpAmdanlatathotmaildot...@NoSpAm.comwrote:
Hi,
We need to serialize (binary) objects containing generic collections. The
thing is, when we try to get the objects back (deserialize) with a different
instance of the application, we receive an exception stating the constructor
of the generic class does not exist.
So there's your starting point. Do you have a constructor for the
generic class?
So Is there a way to obtain the
resulting classes of the generics we use so we can add them as "normal" code
in our app?
What is "normal"?
We can develop our own starting from non-generic collections,
but then we would have to develop our own methods and maintain them. The
generics are already debuged and maintained by MS so we would like to
generate them with the same generator the framework generates them if
possible.
Nothing is as it seems. MS code is not bug free. A while ago, a guy
had a problem here because he was using a structure rather than a
class--and precisely because of this, he had a problem (mixing
structures with classes is like mixing trucks with automobiles--they
don't really mix. Avoid structures).
>
So if I summarize what we want : We want to take the resulting class from a
given generic and "copy-paste" the code and create a "user class" that we
will add to our project.

Is it possible?
No. Not as you described it. It might help to know what interface
you're using.

Good luck,

RL

Aug 14 '07 #2

P: n/a
On Aug 14, 3:31 pm, raylopez99 <raylope...@yahoo.comwrote:

<snip>
Nothing is as it seems. MS code is not bug free. A while ago, a guy
had a problem here because he was using a structure rather than a
class--and precisely because of this, he had a problem (mixing
structures with classes is like mixing trucks with automobiles--they
don't really mix. Avoid structures).
Structures and classes mix absolutely fine - you just need to know
what's going on. If you don't understand how each of them works, then
indeed you'll get problems.

Jon

Aug 14 '07 #3

P: n/a
hi,

ok... maybe I explained it wrong... let's take Dictionary<int, string>.
When I instanciate one of those, .NET generates on-the-fly a new class for
Dictionary<int, string(or maybe it's at compile time, but the problem
stays the same for us because it's a web app, so it can be recompiled at any
time). If I serialize it, it works fine. If I deserialize it within the same
app instance, it works fine. If a new instance is started and I try to
deserialize it, then I get an exception stating there is no constructor for
Dictionary<int, string>.

So, what I want to know is if it is possible to get the resulting class (The
one .NET generates from Dictionary<int, string>) so we can take the code and
put it in a file in our project so the class always stays the exact same
class?

btw, I know MS code is not bug free, but if we can build on something that
was tested by thousands if not millions of users (developers), we go for it.

Thanks

ThunderMusic
"raylopez99" <ra********@yahoo.comwrote in message
news:11**********************@k79g2000hse.googlegr oups.com...
On Aug 14, 7:11 am, "ThunderMusic"
<NoSpAmdanlatathotmaildot...@NoSpAm.comwrote:
>Hi,
We need to serialize (binary) objects containing generic collections. The
thing is, when we try to get the objects back (deserialize) with a
different
instance of the application, we receive an exception stating the
constructor
of the generic class does not exist.

So there's your starting point. Do you have a constructor for the
generic class?
>So Is there a way to obtain the
resulting classes of the generics we use so we can add them as "normal"
code
in our app?

What is "normal"?
>We can develop our own starting from non-generic collections,
but then we would have to develop our own methods and maintain them. The
generics are already debuged and maintained by MS so we would like to
generate them with the same generator the framework generates them if
possible.

Nothing is as it seems. MS code is not bug free. A while ago, a guy
had a problem here because he was using a structure rather than a
class--and precisely because of this, he had a problem (mixing
structures with classes is like mixing trucks with automobiles--they
don't really mix. Avoid structures).
>>
So if I summarize what we want : We want to take the resulting class from
a
given generic and "copy-paste" the code and create a "user class" that we
will add to our project.

Is it possible?

No. Not as you described it. It might help to know what interface
you're using.

Good luck,

RL

Aug 14 '07 #4

P: n/a
Jon Skeet [C# MVP] wrote:
On Aug 14, 3:31 pm, raylopez99 <raylope...@yahoo.comwrote:

<snip>
>Nothing is as it seems. MS code is not bug free. A while ago, a guy
had a problem here because he was using a structure rather than a
class--and precisely because of this, he had a problem (mixing
structures with classes is like mixing trucks with automobiles--they
don't really mix. Avoid structures).

Structures and classes mix absolutely fine - you just need to know
what's going on. If you don't understand how each of them works, then
indeed you'll get problems.

Jon
I send that! Structs are indeed incredibly handy items. They are great
for abstracting something that you might normally pass around as (say)
an int. A lot of times I'll create a struct for some business
concept--like a SKU--instead of just passing around an int. This is
incredibly handy for a lot of reasons.

I'm not quite sure how you would "mix" structs and classes anyhow...

--
-glenn-
Aug 14 '07 #5

P: n/a
On Aug 14, 3:52 pm, GlennDoten <gdo...@gmail.comwrote:

<snip>
I'm not quite sure how you would "mix" structs and classes anyhow...
I suspect Ray means in terms of putting a reference type variable as a
member of a struct. It's rarely useful, but it *does* work, and so
long as you understand what reference types and value types actually
do, there shouldn't be any surprises.

Jon

Aug 14 '07 #6

P: n/a
ThunderMusic,

If you are serializing a Dictionary<int, stringto a byte stream, then
you should be able to recreate that instance in any instance of an app that
requires a Dictionary<int, string>. There should be no errors here.

Can you recreate the example? I've done it here with that type, and
have no problems serializing/deserializing a dictionary like that and then
recreating the instance in another run of the app.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"ThunderMusic" <No*************************@NoSpAm.comwrote in message
news:eA**************@TK2MSFTNGP06.phx.gbl...
hi,

ok... maybe I explained it wrong... let's take Dictionary<int, string>.
When I instanciate one of those, .NET generates on-the-fly a new class for
Dictionary<int, string(or maybe it's at compile time, but the problem
stays the same for us because it's a web app, so it can be recompiled at
any time). If I serialize it, it works fine. If I deserialize it within
the same app instance, it works fine. If a new instance is started and I
try to deserialize it, then I get an exception stating there is no
constructor for Dictionary<int, string>.

So, what I want to know is if it is possible to get the resulting class
(The one .NET generates from Dictionary<int, string>) so we can take the
code and put it in a file in our project so the class always stays the
exact same class?

btw, I know MS code is not bug free, but if we can build on something that
was tested by thousands if not millions of users (developers), we go for
it.

Thanks

ThunderMusic
"raylopez99" <ra********@yahoo.comwrote in message
news:11**********************@k79g2000hse.googlegr oups.com...
>On Aug 14, 7:11 am, "ThunderMusic"
<NoSpAmdanlatathotmaildot...@NoSpAm.comwrote:
>>Hi,
We need to serialize (binary) objects containing generic collections.
The
thing is, when we try to get the objects back (deserialize) with a
different
instance of the application, we receive an exception stating the
constructor
of the generic class does not exist.

So there's your starting point. Do you have a constructor for the
generic class?
>>So Is there a way to obtain the
resulting classes of the generics we use so we can add them as "normal"
code
in our app?

What is "normal"?
>>We can develop our own starting from non-generic collections,
but then we would have to develop our own methods and maintain them. The
generics are already debuged and maintained by MS so we would like to
generate them with the same generator the framework generates them if
possible.

Nothing is as it seems. MS code is not bug free. A while ago, a guy
had a problem here because he was using a structure rather than a
class--and precisely because of this, he had a problem (mixing
structures with classes is like mixing trucks with automobiles--they
don't really mix. Avoid structures).
>>>
So if I summarize what we want : We want to take the resulting class
from a
given generic and "copy-paste" the code and create a "user class" that
we
will add to our project.

Is it possible?

No. Not as you described it. It might help to know what interface
you're using.

Good luck,

RL


Aug 14 '07 #7

P: n/a
We need to serialize (binary) objects containing generic collections. The
thing is, when we try to get the objects back (deserialize) with a
different instance of the application, we receive an exception stating the
constructor of the generic class does not exist.
Why is this happening? I am able to serialize (binary) a bunch of classes
into a file and then I am able to deserialize them at any time on different
instances of the application. Probably not the exact same thing you are
doing but equivalent.

What else do you have going on?
Aug 14 '07 #8

P: n/a
Thanks to everyone of you.
We finally found the problem. We read the exception stack wrong and thought
it was the actual System.Collections.Generics.Dictionary that was not
deserializable. The thing is, we made a custom Dictionary (that inherits
from Dictionary) that can be serialized in XML and it's called Dictionary
just the same, but in another namespace... The "Serialization" constructor
(the 7th constructor of Dictionary<>) was missing, so that's why we had this
exception. Now everything is back on track.

Thanks and sorry for the waste of time

ThunderMusic

"Rene" <a@b.comwrote in message
news:uu**************@TK2MSFTNGP04.phx.gbl...
>We need to serialize (binary) objects containing generic collections. The
thing is, when we try to get the objects back (deserialize) with a
different instance of the application, we receive an exception stating
the constructor of the generic class does not exist.

Why is this happening? I am able to serialize (binary) a bunch of classes
into a file and then I am able to deserialize them at any time on
different instances of the application. Probably not the exact same thing
you are doing but equivalent.

What else do you have going on?


Aug 14 '07 #9

This discussion thread is closed

Replies have been disabled for this discussion.