no parameterless constructor defined for this object
-
I have a class that has no parameters then i will create an object of it and convert it to stream and store it into a dictionary, every thing is fine until i add parameter to the class. basically i do this.
var classObject = new ClassObject();
dictionary.Add(id, new MemoryStream());
///then add the object stream here to the created storage on the dictioarythen i will just retrieve it like this.
var retriveObject = dictionary[id] as ClassObject;
Now I add a single parameter on that class now using the last code above will produce
Quote:
no parameterless constructor defined for this object
my question, is there way to fix the exception without removing the parameter i added to the class? Thanks
-
I have a class that has no parameters then i will create an object of it and convert it to stream and store it into a dictionary, every thing is fine until i add parameter to the class. basically i do this.
var classObject = new ClassObject();
dictionary.Add(id, new MemoryStream());
///then add the object stream here to the created storage on the dictioarythen i will just retrieve it like this.
var retriveObject = dictionary[id] as ClassObject;
Now I add a single parameter on that class now using the last code above will produce
Quote:
no parameterless constructor defined for this object
my question, is there way to fix the exception without removing the parameter i added to the class? Thanks
Gilbert Consellado wrote:
is there way to fix the exception without removing the parameter i added to the class
Which implies that your code sample doesn't reflect the current code:
var classObject = new ClassObject();
Has been changed to something like
var classObject = new ClassObject(myParameterValue);
And the class constructor changed to something like
public classObject(SomeClass parameterName)
{
...As a result, the class no longer contains a parameterless constructor as the error message indicates. Create a new constructor:
public classObject()
{
...And it should get rid of the error.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
-
Gilbert Consellado wrote:
is there way to fix the exception without removing the parameter i added to the class
Which implies that your code sample doesn't reflect the current code:
var classObject = new ClassObject();
Has been changed to something like
var classObject = new ClassObject(myParameterValue);
And the class constructor changed to something like
public classObject(SomeClass parameterName)
{
...As a result, the class no longer contains a parameterless constructor as the error message indicates. Create a new constructor:
public classObject()
{
...And it should get rid of the error.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
Sorry, I think i didn't deliver my post right. The first example, that is the old code, and I already remove that. Actually the current code is something like this:
var classObject = new ClassObject(parameterValue);
dictionary.Add(id, new MemoryStream());
///then add the object stream here to the created storage on the dictionaryThen I retrieve it like this.
var retriveObject = dictionary[id] as ClassObject; //The runtime error while happen here
Thanks
-
Sorry, I think i didn't deliver my post right. The first example, that is the old code, and I already remove that. Actually the current code is something like this:
var classObject = new ClassObject(parameterValue);
dictionary.Add(id, new MemoryStream());
///then add the object stream here to the created storage on the dictionaryThen I retrieve it like this.
var retriveObject = dictionary[id] as ClassObject; //The runtime error while happen here
Thanks
If I try to duplicate what you have:
Dictionary<int, MemoryStream> dictionary = new Dictionary<int, MemoryStream>(); var classObject = new ClassObject("hello"); int id = 666; dictionary.Add(id, new MemoryStream()); var retriveObject = dictionary\[id\] as ClassObject; }
public class ClassObject : MemoryStream
{
public ClassObject(string s) { }
}I don't get an error - I do get a null value, but that's what I expect. So how is my code different from yours?
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
-
If I try to duplicate what you have:
Dictionary<int, MemoryStream> dictionary = new Dictionary<int, MemoryStream>(); var classObject = new ClassObject("hello"); int id = 666; dictionary.Add(id, new MemoryStream()); var retriveObject = dictionary\[id\] as ClassObject; }
public class ClassObject : MemoryStream
{
public ClassObject(string s) { }
}I don't get an error - I do get a null value, but that's what I expect. So how is my code different from yours?
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
hmmm, honestly I didn't know how to reply to this. It bothers me for a while. I apology, but are you serious with that code snippet or you just give me a sarcastic reply? ;) P.S. I didn't post the the whole code on may sample to make the post short.
-
hmmm, honestly I didn't know how to reply to this. It bothers me for a while. I apology, but are you serious with that code snippet or you just give me a sarcastic reply? ;) P.S. I didn't post the the whole code on may sample to make the post short.
No - I'm serious - I've just combined your code snippets into something that will compile and run to try and run down why you get the error in code that shouldn't give it. Obviously, I can't see code you haven't given us so I have to assume a minimum that gets it to compile - but I don;t expect it to match yours. It's there so you can explain where yours differs and to let me create a "closer" version for testing here.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
-
I have a class that has no parameters then i will create an object of it and convert it to stream and store it into a dictionary, every thing is fine until i add parameter to the class. basically i do this.
var classObject = new ClassObject();
dictionary.Add(id, new MemoryStream());
///then add the object stream here to the created storage on the dictioarythen i will just retrieve it like this.
var retriveObject = dictionary[id] as ClassObject;
Now I add a single parameter on that class now using the last code above will produce
Quote:
no parameterless constructor defined for this object
my question, is there way to fix the exception without removing the parameter i added to the class? Thanks
I'm positive you just need to add a parameterless constructor, EVEN if you don't intend to use it. You could always mark it internal too. I have to assume you're using an xml serializer because in my experience, this has always happened when an object lacked a parameterless constructor. I also have to assume that when you added a constructor with parameters, you removed the parameterless one. Can't do that...as a sidenote, it would be helpful to have explained how exactly you serialize the object for others to better understand your issue. So basically, it should look like this:
[Serializable]
public class ClassObject : MemoryStream
{
//Must be present for serialization to work!
internal ClassObject() { }public ClassObject(string s) { }
}
-
No - I'm serious - I've just combined your code snippets into something that will compile and run to try and run down why you get the error in code that shouldn't give it. Obviously, I can't see code you haven't given us so I have to assume a minimum that gets it to compile - but I don;t expect it to match yours. It's there so you can explain where yours differs and to let me create a "closer" version for testing here.
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
Got it. :-D But i just decide to remove the parameter and just expose the property setter of one of its member, because it also introduce other code problem. btw, thanks
-
Got it. :-D But i just decide to remove the parameter and just expose the property setter of one of its member, because it also introduce other code problem. btw, thanks
You're welcome!
Bad command or file name. Bad, bad command! Sit! Stay! Staaaay...
-
I'm positive you just need to add a parameterless constructor, EVEN if you don't intend to use it. You could always mark it internal too. I have to assume you're using an xml serializer because in my experience, this has always happened when an object lacked a parameterless constructor. I also have to assume that when you added a constructor with parameters, you removed the parameterless one. Can't do that...as a sidenote, it would be helpful to have explained how exactly you serialize the object for others to better understand your issue. So basically, it should look like this:
[Serializable]
public class ClassObject : MemoryStream
{
//Must be present for serialization to work!
internal ClassObject() { }public ClassObject(string s) { }
}
Thanks, yeah it seems to work this way. But marking it internal will give the same error. Actually I use XtraReport a third party component it has SaveLayout and FromStream member. But i just decide to remove the constructor parameter and just pass the value through a property. P.S. Whooo my ISP giving me crap right now.