SerializeToStream function


Author
Message
Daniel Essin
Daniel Essin
StrataFrame User (339 reputation)StrataFrame User (339 reputation)StrataFrame User (339 reputation)StrataFrame User (339 reputation)StrataFrame User (339 reputation)StrataFrame User (339 reputation)StrataFrame User (339 reputation)StrataFrame User (339 reputation)StrataFrame User (339 reputation)
Group: Forum Members
Posts: 235, Visits: 309
Using this code:

MemoryStream myStream = new MemoryStream();

boAllUsers1.NewRow();

boAllUsers1.SerializeToStream(myStream);

myStream.Position = 0;

BOLibrary.boAllUsers allUsers = (BOLibrary.boAllUsers)BusinessLayer.DeserializeBusinessObject(myStream);



1) {"Type 'BOLibrary.boAllUsers' in Assembly 'BOLibrary, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable."}



Is this something that we are supposed to have to address manually for each BO or should the code generator mark them all as [Serializable]?



2) The SerializeToStream method should set the Position to 0 before returning. Otherwise you get an "End of Stream reached unexpectedly" exception on the DeserializeBusinessObject call.



3) After addressing 1 and 2 the following exception is thrown:

{"The constructor to deserialize an object of type 'BOLibrary.boAllUsers' was not found."}



Replies
StrataFrame Team
S
StrataFrame Developer (6.5K reputation)StrataFrame Developer (6.5K reputation)StrataFrame Developer (6.5K reputation)StrataFrame Developer (6.5K reputation)StrataFrame Developer (6.5K reputation)StrataFrame Developer (6.5K reputation)StrataFrame Developer (6.5K reputation)StrataFrame Developer (6.5K reputation)StrataFrame Developer (6.5K reputation)
Group: StrataFrame Developers
Posts: 3K, Visits: 2.5K
On the resetting the position of the stream to 0, we're not going to modify any portion of the stream after we write the business object to it, because it might not be the only object on the stream (you can write several business objects to the same stream, and setting the position to 0 after each one would cause them to overwrite each other). Additionally, you cannot modify the position manually on all streams, (the System.Security.Cryptography.CryptoStream and System.Net.NetworkStream come to mind) and trying to set it would throw an exception on these streams. It's better to let the developer manage his own stream position than modify it without his knowledge.
Daniel Essin
Daniel Essin
StrataFrame User (339 reputation)StrataFrame User (339 reputation)StrataFrame User (339 reputation)StrataFrame User (339 reputation)StrataFrame User (339 reputation)StrataFrame User (339 reputation)StrataFrame User (339 reputation)StrataFrame User (339 reputation)StrataFrame User (339 reputation)
Group: Forum Members
Posts: 235, Visits: 309
On the position resetting issue, your logic is inescapable. It also answers my other question about where to create a new stream.



Thank you.
GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...





Similar Topics

Reading This Topic

Login

Explore
Messages
Mentions
Search